Описание утилиты AVISynth.

AVISynth

AVISynth действительно классная утилита, однако многие не используют её! Причиной этого может быть даже не сложность её применения а то, что просто не разобрались с её установкой и запуском или вообще не знают о ней. Поэтому объяснение что такое AVISynth и с чем её едят представляется полезным

Представляемый далее материал является в основном переводом и систематизацией файлов описаний от разработчиков AVISynth и подключаемых фильтров.
  • Введение
    • Что такое AVISynth?
    • AVISynth и VirtualDub
    • Установка AVISynth
    • Информация об авторах AVISynth
  • Общая информация.
  • Компактный список команд.
  • Развёрнутый список команд.
  • Учебное пособие.
    • Линейное редактирование
    • Нелинейное редактирование
    • Переменные
    • Подразумевание last
    • Объёктно-ориентированная запись
  • Подгружаемые фильтры.
    • Фильтры VirtualDub.
    • Плагин InverseTelecine.dll.
      • InverseTelecine
      • Deinterlace
      • Decimate
    • Плагин MPEG2DEC.dll.
      • mpeg2source
      • TemporalSmoother
      • SelectRangeEvery
    • Плагин SpatialSoftenMMX.
    • Плагин GreedyHMA - Greedy (High Motion для AVISynth).
      • Более полное описание параметров.
      • Известные проблемы и ограничения.
      • Метод избавления от гребёнки Greedy (High Motion).
  • Ссылки.
Вопросы и замечания направляйте Mitra


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • AddBorders
  • Набор
    • AlignedSplice
    • UnalignedSplice
  • Amplify
  • Animate
  • AssumeFPS
  • Набор
    • AssumeFrameBased
    • AssumeFieldBased
  • AudioDub
  • Набор
    • AVISource
    • OpenDMLSource
    • AVIFileSource
    • WAVSource
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • AudioDub
  • DelayAudio
  • ConvertAudioTo16bit
  • ResampleAudio
  • Amplify
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • BicubicResize
  • BilinearResize
  • Набор
    • Blackness
    • BlankClip
  • Набор
    • Blur
    • Sharpen
  • Bob
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • ChangeFPS
  • ColorBars
  • ComplementParity
  • ConvertAudioTo16bit
  • Набор
    • ConvertToYUY2
    • ConvertToRGB
  • Набор
    • Crop
    • CropBottom
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
Нажмите на стрелку для получения списка фильтров относящихся к выбранной категории
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • ConvertToYUY2
    • ConvertToRGB
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • DelayAudio
  • DeleteFrame
  • DirectShowSource
  • Dissolve
  • DoubleWeave
  • DuplicateFrame
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Subtract
  • ShowFrameNumber
  • ShowSMPTE
  • Набор
    • StackHorizontal
    • StackVertical
  • ShowFiveVersions
  • FlipVertical
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Trim
  • Набор
    • AlignedSplice
    • UnalignedSplice
  • Dissolve
  • Reverse
  • Набор
    • FadeOut
    • FadeOut2
  • Набор
    • SelectEven
    • SelectOdd
  • Pulldown
  • Interleave
  • SelectEvery
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • FadeOut
    • FadeOut2
  • FixBrokenChromaUpsampling
  • FixLuminance
  • FlipVertical
  • FreezeFrame
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • AssumeFPS
  • ChangeFPS
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • FreezeFrame
  • DeleteFrame
  • DuplicateFrame
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • HorizontalReduceBy2
    • VerticalReduceBy2
    • ReduceBy2
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • IPCSource
  • Interleave
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Levels
  • Набор
    • Blur
    • Sharpen
  • Набор
    • SpatialSoften
    • TemporalSoften
  • FixLuminance
  • FixBrokenChromaUpsampling
  • Letterbox
  • Subtitle
  • PeculiarBlend
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • AssumeFrameBased
    • AssumeFieldBased
  • ComplementParity
  • SeparateFields
  • Weave
  • DoubleWeave
  • Bob
  • SwapFields
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Letterbox
  • Levels
  • Набор
    • LoadPlugin
    • LoadVirtualdubPlugin
    • LoadVFAPIPlugin
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • MessageClip
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Animate
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • AVISource
    • OpenDMLSource
    • AVIFileSource
    • WAVSource
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • PeculiarBlend
  • Pulldown
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • LoadPlugin
    • LoadVirtualdubPlugin
    • LoadVFAPIPlugin
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • ResampleAudio
  • Набор
    • HorizontalReduceBy2
    • VerticalReduceBy2
    • ReduceBy2
  • Reverse
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • AVISource
    • OpenDMLSource
    • VIFileSource
    • WAVSource
  • Набор
    • SegmentedAVISource
    • SegmentedDirectShowSource
  • DirectShowSource
  • IPCSource
  • Набор
    • Blackness
    • BlankClip
  • ColorBars
  • MessageClip
  • Version
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • HorizontalReduceBy2
    • VerticalReduceBy2
    • ReduceBy2
  • BilinearResize
  • BicubicResize
  • Набор
    • Crop
    • CropBottom
  • AddBorders
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • SegmentedAVISource
    • SegmentedDirectShowSource
  • Набор
    • SelectEven
    • SelectOdd
  • SelectEvery
  • SeparateFields
  • Набор
    • Blur
    • Sharpen
  • ShowFiveVersions
  • ShowFrameNumber
  • ShowSMPTE
  • Набор
    • SpatialSoften
    • TemporalSoften
  • Набор
    • StackHorizontal
    • StackVertical
  • Subtitle
  • Subtract
  • SwapFields
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • SpatialSoften
    • TemporalSoften
  • Trim
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Набор
    • AlignedSplice
    • UnalignedSplice
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Список команд AVISynth по категориям.
  • Методы для загрузки или создания видео-клипов
    • Набор
      • AVISource
      • OpenDMLSource
      • VIFileSource
      • WAVSource
    • Набор
      • SegmentedAVISource
      • SegmentedDirectShowSource
    • DirectShowSource
    • IPCSource
    • Набор
      • Blackness
      • BlankClip
    • ColorBars
    • MessageClip
    • Version
  • Фильтры изменяющие размер кадра
    • Набор
      • HorizontalReduceBy2
      • VerticalReduceBy2
      • ReduceBy2
    • BilinearResize
    • BicubicResize
    • Набор
      • Crop
      • CropBottom
    • AddBorders
  • Фильтры для обработки изображения
    • Levels
    • Набор
      • Blur
      • Sharpen
    • Набор
      • SpatialSoften
      • TemporalSoften
    • FixLuminance
    • FixBrokenChromaUpsampling
    • Letterbox
    • Subtitle
    • PeculiarBlend
  • Фильтры для конвертации цветового пространства
    • Набор
      • ConvertToYUY2
      • ConvertToRGB
  • Фильтры для работы с черезстрочным видео
    • Набор
      • AssumeFrameBased
      • AssumeFieldBased
    • ComplementParity
    • SeparateFields
    • Weave
    • DoubleWeave
    • Bob
    • SwapFields
  • Методы для монтажа
    • Trim
    • Набор
      • AlignedSplice
      • UnalignedSplice
    • Dissolve
    • Reverse
    • Набор
      • FadeOut
      • FadeOut2
    • Набор
      • SelectEven
      • SelectOdd
    • Pulldown
    • Interleave
    • SelectEvery
  • Методы для изменения частоты кадров
    • AssumeFPS
    • ChangeFPS
  • Методы для работы с отдельными кадрами
    • FreezeFrame
    • DeleteFrame
    • DuplicateFrame
  • Методы для работы с аудио
    • AudioDub
    • DelayAudio
    • ConvertAudioTo16bit
    • ResampleAudio
    • Amplify
  • Отладка
    • Subtract
    • ShowFrameNumber
    • ShowSMPTE
    • Набор
      • StackHorizontal
      • StackVertical
    • ShowFiveVersions
    • FlipVertical
  • Мета-фильтры
    • Animate
  • Подгружаемые фильтры (Plug-Ins)
    • Набор
      • LoadPlugin
      • LoadVirtualdubPlugin
      • LoadVFAPIPlugin
Алфавитный список команд AVISynth.
  • A
    • AddBorders
    • Набор
      • AlignedSplice
      • UnalignedSplice
    • Amplify
    • Animate
    • AssumeFPS
    • Набор
      • AssumeFrameBased
      • AssumeFieldBased
    • AudioDub
    • Набор
      • AVISource
      • OpenDMLSource
      • AVIFileSource
      • WAVSource
  • B
    • BicubicResize
    • BilinearResize
    • Набор
      • Blackness
      • BlankClip
    • Набор
      • Blur
      • Sharpen
    • Bob
  • C
    • ChangeFPS
    • ColorBars
    • ComplementParity
    • ConvertAudioTo16bit
    • Набор
      • ConvertToYUY2
      • ConvertToRGB
    • Набор
      • Crop
      • CropBottom
  • D
    • DelayAudio
    • DeleteFrame
    • DirectShowSource
    • Dissolve
    • DoubleWeave
    • DuplicateFrame
  • F
    • Набор
      • FadeOut
      • FadeOut2
    • FixBrokenChromaUpsampling
    • FixLuminance
    • FlipVertical
    • FreezeFrame
  • H
    • Набор
      • HorizontalReduceBy2
      • VerticalReduceBy2
      • ReduceBy2
  • I
    • IPCSource
    • Interleave
  • L
    • Letterbox
    • Levels
    • Набор
      • LoadPlugin
      • LoadVirtualdubPlugin
      • LoadVFAPIPlugin
  • M
    • MessageClip
  • O
    • Набор
      • AVISource
      • OpenDMLSource
      • AVIFileSource
      • WAVSource
  • P
    • PeculiarBlend
    • Pulldown
  • R
    • ResampleAudio
    • Набор
      • HorizontalReduceBy2
      • VerticalReduceBy2
      • ReduceBy2
    • Reverse
  • S
    • Набор
      • SegmentedAVISource
      • SegmentedDirectShowSource
    • Набор
      • SelectEven
      • SelectOdd
    • SelectEvery
    • SeparateFields
    • Набор
      • Blur
      • Sharpen
    • ShowFiveVersions
    • ShowFrameNumber
    • ShowSMPTE
    • Набор
      • SpatialSoften
      • TemporalSoften
    • Набор
      • StackHorizontal
      • StackVertical
    • Subtitle
    • Subtract
    • SwapFields
  • T
    • Набор
      • SpatialSoften
      • TemporalSoften
    • Trim
  • U
    • Набор
      • AlignedSplice
      • UnalignedSplice
  • V
    • Version
    • Набор
      • HorizontalReduceBy2
      • VerticalReduceBy2
      • ReduceBy2
  • W
    • Weave
    • Набор
      • AVISource
      • OpenDMLSource
      • AVIFileSource
      • WAVSource


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Version
  • Набор
    • HorizontalReduceBy2
    • VerticalReduceBy2
    • ReduceBy2
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


Компактный cписок команд AVISynth.
Методы для загрузки или создания видео-клипов
Фильтры изменяющие размер кадра
Фильтры для обработки изображения
Фильтры для конвертации цветового пространства
Фильтры для работы с чересстрочным видео
Методы для монтажа
Методы для изменения частоты кадров
Методы для работы с отдельными кадрами
Методы для работы с аудио
Отладка
Мета-фильтры
Подгружаемые фильтры (Plug-Ins)
  • Weave
  • Набор
    • AVISource
    • OpenDMLSource
    • AVIFileSource
    • WAVSource
A
B
C
D
F
H
I
L
M
O
P
R
S
T
U
V
W
Общая информация
[Общая информация] 		AVISynth
[AVISynth] 		Команды развёрнуто
[Команды развёрнуто]


A
AddBorders
AddBorders(clip,left,top,right,bottom)

AddBorders добавляет чёрные границы по краям изображения, которые имеют указанную ширину (в пикселях). Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и right должны быть чётными.

Помните, что многие алгоритмы сжатия с потерями плохо работают с одноцветными границами, если их размер не кратен размеру блока (16 пикселов для MPEG)

Вы можете использовать этот фильтр в комбинации с Crop для смещения изображения без изменения размера кадра. К примеру:
# Сместить 352x240 изображение на 2 пикселя вправо
Crop(0,0,350,240).AddBorders(2,0,0,0)
AlignedSplice / UnalignedSplice
AlignedSplice(clip1,clip2[,...])
UnalignedSplice(clip1,clip2[,...])

AlignedSplice и UnalignedSplice соединяют два или более видео-клипов непрерывно. Различие между фильтрами лежит в том, как они обращаются со звуковыми дорожками. UnalignedSplice просто соединяет их без внимания к синхронизации с видео. AlignedSplice обрезает первую звуковую дорожку или вставляет тишину, смотря что требуется для гарантии сохранения синхронизации с видео второй звуковой дорожки.

Вы должны использовать UnalignedSplice когда объединяемые фонограммы были исходно непрерывны - к примеру, когда вы объединяете файлы захваченные в AVI_IO. Небольшие ошибки отсчётов времени могут вести к щелчкам в звуке если вы примните AlignedSplice в такой ситуации.

Скриптовый язык AVISynth предоставляет + и ++ как синонимы для UnalignedSplice и AlignedSplice соответственно
Пример 1:
# Объединить сегментированный файл захвата для формирования цельного клипа
UnalignedSplice(AVISource("capture1.avi"), AVISource("capture2.avi"), AVISource("capture3.avi"))
# или: AVISource("capture1.avi") + AVISource("capture2.avi") + AVISource("capture3.avi")
Пример 2:
# Извлечь три сцены из клипа и объединить их вместе в новом порядке
AVISource("video.avi")
edited_video = Trim(2000,2500) ++ Trim(3000,3500) ++ Trim(1000,1500)
Amplify / AmplifydB
Amplify(clip,amount)
Amplify(clip,left,right)
AmplifydB(clip,amount)
AmplifydB(clip,left,right)

Команда Amplify умножает отсчёты аудио-выборки на amount. Вы можете задавать различные коэффициенты для двух стереоканалов (left и right). AmplifydB тоже самое, исключая то, что значение задаётся в dB. Вы можете использовать отрицательные значения (или масштабный коэффициент от 0 до 1) для уменьшения громкости. Отрицательный масштабный коэффициент сдвинет фазу на 180°.

По ходу процесса отсчёты аудио-выборке конвертируются в 16 бит.
Animate
Animate(start-frame,end-frame,"filter",start-args,end-args)

Animate это мета-фильтр, который вычисляет свой параметр filter с непрерывно изменяемыми аргументами. В кадре start-frame и ранее, фильтр вычисляется с аргументами заданными в start-args. В кадре end-frame и позднее, фильтр вычисляется с аргументами заданными в end-args. В середине, аргументы линейно интерполируются для гладкого перехода.

Аргумент filter должен быть заключён в символы цитирования, и два вложенных списка аргументов не заключены в скобки. Строки и видео-клипы не могут интерполироваться, и значит должны совпадать в обоих списках аргументов. Вы не можете использовать запись в стиле ООП или предполагать last в этом filter, даже если обычно filter позволяет такое в своих аргументах.

Фильтр некорректно обрабатывает изменение звуковой дорожки, так что не рекомендуется применять его с фильтрами(filter) которые её изменяют. И во имя неба не давайте начальных и конечных параметров приводящих к различным размерам кадра.

Аргумент filter может также быть Animate если вы хотите квадратичную, а не линейную интерполяцию, но если об этом слишком много думать, то голова может разлететься.

Примеры

# Сделать скроллинг для "Version" видео

ver = Version()
return Animate(0,149,"Crop",ver,0,0,64,32,ver,448,0,64,32)

# Растворить(Fade) в белое

Animate(100,200,"Levels",last,0,1,255,0,255,last,0,1,255,255,255)

# Выполнить постепенное увеличение из центра видео 320x240,
# начиная с увеличения 1:1 в кадре 100 и кончая увеличением
# 4:1 в кадре 200

Animate(100,200, "BicubicResize",last,0,0,320,240,320,240,last,120,90,80,60,320,240)

# Сделать текст "Hello, World!" увеличивающимся из центра видео 320x240

Animate(0,48,"Subtitle",last,"Hello, World!",160,120,0,99999,"Arial",last,0,"Hello, World!",25,130,0,99999,"Arial",48)
AssumeFPS
AssumeFPS(clip,new_fps[,sync_audio])

Команда AssumeFPS изменяет частоту кадров без изменения их числа (в результате видео воспроизводиться быстрее или медленнее); если sync_audio имеет значение "истина", то частота дискретизации звука также меняется необходимым образом.
AssumeFrameBased / AssumeFieldBased
AssumeFrameBased(clip)
AssumeFieldBased(clip)

AVISynth следит, является клип основанным на полях или кадрах. Если клип основан на полях, то также сохраняется соотношение каждого поля (какое оно, верхние или нижнее поле кадра). Если клип основан на кадрах, то сохраняется порядок полей в кадре (т.е. какое поле в кадре идёт первым, когда они разделяются)

Однако эта информация необязательно верна, так как информация о полях обычно не хранится в видео-файлах и AVISynth методы источники только предполагают её. AssumeFrameBased и AssumeFieldBased позволяют вам сказать AVISynth истинный тип клипа.

AssumeFrameBased выбрасывает существующую информацию и считает, что клип является основанным на кадрах, с нижним (чётным) полем первым в каждом кадре. (Метод-источник делает так). Если вы желаете верхнее поле быть первым, используйте после ComplementParity.

AssumeFieldBased выбрасывает существующую информацию и считает, что клип является основанным на полях, с четными полями внизу и нечётными полями вверху. Если вы хотите расположить их наоборот, используйте после ComplementParity.
AudioDub
AudioDub(video-clip,audio-clip)

AudioDub берёт видео-поток из первого аргумента, аудио-поток из второго и объединяет их в один клип. Если какай-то поток отсутствует, фильтр попробует в другом порядке, если и это не поможет он вернёт ошибку.

Пример:

# Загрузить сегменты захваченные AVICAP32 которая пишет
# видео в несколько AVI сегментов и аудио в один WAV файл

video = AVISource("capture1.avi") + AVISource("capture2.avi")
audio = WAVSource("capture.wav")
AudioDub(video, audio)
AVISource / OpenDMLSource / AVIFileSource / WAVSource
AVISource("filename")
OpenDMLSource("filename")
AVIFileSource("filename")
WAVSource("filename")

AVISource передаётся один аргумент, являющийся именем файла в кавычках. Метод пытается считать этот файл используя либо интерфейс "Video-for-Windows" либо встроенный OpenDML код (перенесённый из VirtualDub). Фильтр способен загрузить любой файл, для которого существует AVIFile обработчик. Сюда включаются не только AVI файлы, но и WAV, AVS (скрипт AVISynth) и VDR (фрейм-сервер VirtualDub).

Метод AVISource определяет тип файла и вызывает наиболее соответствующий AVIFile или OpenDML обработчик. В случае, если открыть файл таким образом не удаётся, можно использовать OpenDMLSource или AVIFileSource, явно указывая какой тип обработчика использовать. Оба фильтра способны читать обычные (>2GB) AVI файлы. Но только через OpenDML можно работать с файлами большего размера, и только AVIFile открывает не AVI файлы (WAV, VDR, AVS).

Примеры

AVISource("d:\capture.avi") # Замечание C-программистам: обратный слеш не дублируется.
AVISource("c:/capture/00.avi") # прямой слеш также работает
AVISource("f:\soundtrack.wav") # это работает
WAVSource("f:\soundtrack.wav") # и это тоже


Методы для работы с аудио
AudioDub
AudioDub(video-clip,audio-clip)

AudioDub берёт видео-поток из первого аргумента, аудио-поток из второго и объединяет их в один клип. Если какай-то поток отсутствует, фильтр попробует в другом порядке, если и это не поможет он вернёт ошибку.

Пример:

# Загрузить сегменты захваченные AVICAP32 которая пишет
# видео в несколько AVI сегментов и аудио в один WAV файл

video = AVISource("capture1.avi") + AVISource("capture2.avi")
audio = WAVSource("capture.wav")
AudioDub(video, audio)
DelayAudio
DelayAudio(clip,seconds)

DelayAudio задерживает звуковую дорожку на seconds секунд. seconds может быть отрицательным и/или иметь дробную часть.

Пример:

# Воспроизводить аудио на полсекунды раньше
DelayAudio(-0.5)
ConvertAudioTo16bit
ConvertAudioTo16bit(clip)

Метод ConvertAudioTo16bit преобразует отсчёты аудио-выборки из 8 в 16 бит.
ResampleAudio
ResampleAudio(clip,new-sample-rate)

Метод ResampleAudio проводит высококачественное изменение частоты дискретизации аудио.
Amplify / AmplifydB
Amplify(clip,amount)
Amplify(clip,left,right)
AmplifydB(clip,amount)
AmplifydB(clip,left,right)

Команда Amplify умножает отсчёты аудио-выборки на amount. Вы можете задавать различные коэффициенты для двух стереоканалов (left и right). AmplifydB тоже самое, исключая то, что значение задаётся в dB. Вы можете использовать отрицательные значения (или масштабный коэффициент от 0 до 1) для уменьшения громкости. Отрицательный масштабный коэффициент сдвинет фазу на 180°.

По ходу процесса отсчёты аудио-выборке конвертируются в 16 бит.


B
BicubicResize
BicubicResize(clip,target-width,target-height[,b,c])
BicubicResize(clip,target-width,target-height,b,c,source-left,source-top,source-width,source-height)

BicubicResize аналогичен BilinearResize, не считая замены линейной фильтрации на Митчелла-Нетравали двухпараметрическую кубическую. Параметры b и c могут быть использованы для настройки свойств кривой. С b=0 и c=0.75 фильтр работает идентично фильтру VirtualDub "resize [precise bicubic]" и результат одинаков, с учётом проблемы масштабного коэффициента описанной в BilinearResize. Значения по умолчанию: b=1/3 и c=1.3 рекомендованы Митчеллом и Нетравали как дающие наиболее визуально приятные результаты для человека в субъективных тестах. Большие значения b и c дают интересные эффекты, например попробуйте b=0 и c=-5.

При увеличении размера кадра, BicubicResize даёт результаты выглядящие значительно лучше нежели BilinearResize. Однако при уменьшении результаты сблизятся или у BilinearResize будет даже лучше. Несмотря на то, что бикубический фильтр VirtualDub даёт изображение, которое выглядит лучше чем билинейный, это в основном за счёт подчёркивания границ бикубическим фильтром, а не результат лучшей выборки. Чёткое изображение хорошо, пока вы не попытаетесь его сжать. В этот момент они очень быстро начнут раздражать вас. BicubicResize по умолчанию не подчёркивает границ так сильно, как бикубический в VirtualDub, но все же подчёркивает сильнее чем билинейный. Если вы планируете кодировать видео с низким битрейтом, не удивляйтесь, если BilinearResize даст лучшее качество
BilinearResize
BilinearResize(clip,target-width,target-height)
BilinearResize(clip,source-left,source-top,source-width,source-height,target-width,target-height)

Фильтр BilinearResize масштабирует кадры входного видео к произвольному новому размеру. Передача необязательных параметров даст в результате тот же результат, как если бы к видео-клипу был применён Crop с этими аргументами до BilinearResize (только быстрее).

BilinearResize использует стандартную билинейную фильтрации. И практически идентичен фильтру VirtualDub "resize [precise bilinear]". Отличие в том, что фильтр VirtualDub похоже берёт не совсем верный масштабный коэффициент. В результате пиксели на верхней и правой границе обрезаются либо дублируются. Ошибка становиться заметна при увеличении вдвое или больше, но в других случаях несущественна.

Примеры

# Загрузить видео-файл и отмасштабировать к 240x180 (с исходного размера)
AVISource("video.avi").BilinearResize(240,180)

# Загрузить 720x480 (CCIR601) видео и отмасштабировать к 252x240 (VCD), сохраняя соотношение сторон
AVISource("dv.avi").BilinearResize(8,0,704,480,352,240)

# Извлечь верхний правый квадрант видео-клипа 320x240 и увеличить его до размеров всего кадра
BilinearResize(160,0,160,120,320,240)
Blackness / BlankClip
Blackness(clip,duration)
BlankClip(template-clip, length,width,height,pixel_type,fps,fps_denominator,audio_rate,stereo,sixteen_bit,color)

Метод BlankClip формирует одноцветный, беззвучный видео-клип указанной длительности (в кадрах). Клип переданный в качестве параметров используется в качестве шаблона для частота кадров, размер кадра т.д.), но вы можете задать все параметры клипа без указания шаблона. Цвет должен быть задан как шестнадцатеричное RGB значение. Без аргументов BlankClip формирует чёрный десяти-секундный клип, 640x480, 24 FPS, 16 bit 44100 Hz стерео.

Blackness это псевдоним BlankClip, внесённый для обратной совместимости.
Blur / Sharpen
Blur(clip,amount)
Sharpen(clip,amount)

Фильтр использует простую 3x3 размывающую или обостряющую матрицу весов пикселов. Наибольший допустимый аргумент для Blur около 1.58, который соответствует равномерному размытию 3x3 пикселя. Значение 1.0 даёт вам веса пикселов (1/4, 1/2, 1/4). Если вам требуется Гауссовское размытие большего радиуса, примените несколько копий Blur(1.0) последовательно.

Отрицательные значения для Blur на самом деле повышают резкость изображения, и фактически Sharpen просто псевдоним для Blur(- n). Наименьшее допустимое значение для Blur - -1.0, и наибольшее для Sharpen - 1.0
Bob
Bob(clip[,b,c][,height])

Bob берёт клип и убирает "гребёнку" следующим образом. Фильтр увеличивает каждое поля до размеров целого кадра интерполяцией между строками. Верхнее поле немного сдвигается вверх в сравнении с нижним, так что картинка на самом деле не прыгает вверх-вниз. Однако, она начинает "мерцать" на стационарных сценах, так как интерполяция на самом деле не восстанавливает другое поле достаточно точно.

Фильтр использует BicubicResize для грязной работы. Вы можете указывать ему значения b и с. Также вы можете воспользоваться случаем изменить вертикальное разрешение параметром height.


C
ChangeFPS
ChangeFPS(clip,new_fps)

Команда ChangeFPS изменяет частоту кадров удаляя или добавляя их для сохранения скорости воспроизведения.
ColorBars
ColorBars(width,height)

Метод ColorBars формирует видео-клип, содержащий цветные полосы SMPTE масштабированные к любому размеру изображения. Формируется клип RGB, 29.97 FPS, длительностью 1 час.
ComplementParity
ComplementParity(clip)

Если клип основан на полях, ComplementParity меняет верхние поля на нижние и наоборот. Если клип основан на кадрах, фильтр изменяет порядок полей в кадре (нижнее -> первое на верхнее -> первое и наоборот).
ConvertAudioTo16bit
ConvertAudioTo16bit(clip)

Метод ConvertAudioTo16bit преобразует отсчёты аудио-выборки из 8 в 16 бит.
ConvertToYUY2 / ConvertToRGB
ConvertToYUY2(clip)
ConvertToRGB(clip)

AVISynth способен внутри работать с двумя форматами цвета, RGB и YUY2. Описываемые два фильтра конвертируют между ними. Если видео уже в нужно формате, оно не изменяется
    В AVISynth следующие фильтры не поддерживают RGB формат:
  • SpatialSoften
  • TemporalSoften
  • FixLuminance
  • FixBrokenChromaUpsampling
  • PeculiarBlend
  • Все VirtualDub и VFAPI плагины.

Если вы попытаетесь использовать любой из этих фильтров с RGB источником, то получите ошибку. Вставка ConvertToYUY2 непосредственно перед вызвавшим её фильтром должно решить проблему. Все фильтры AVISynth поддерживают YUY2 формат.

В большинстве случаев в фильтре ConvertToRGB нет необходимости. Если выход AVISynth в YUY2 формате, а приложение ожидает RGB, системы использует установленный YUY2 кодек и выполнит преобразование. Однако, если кодек YUY2 не установлен, или если (как например в случае кодека ATI's YUY2) кодек преобразует из YUY2 в RGB неверно, можно использовать встроенный в AVISynth фильтр.

HuffYUV действует как системный YUY2 кодек если нет других установленных кодеков. Так что если вы установите HuffYUV и уберёте все другие YUY2 кодеки, вам никогда не понадобиться ConvertToRGB.

Пример:

# Имеется небольшое искажение вызываемое преобразованием между YUV и RGB
# Посмотрим, как это можно увидеть

control = ConvertToYUY2()
test1 = ConvertToRGB(ConvertToYUY2(ConvertToRGB(control)))
test2 = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(test1)))
return Subtract(test2,control)
Crop / CropBottom
Crop(clip,left,top,width,height)
CropBottom(clip,count)

Crop обрезает лишние пиксели с границ каждого кадра. Если источник имеет размер 720x480, а вы хотите уменьшить его до 352x240 для VideoCD, то следует использовать код
# Преобразовать CCIR601 в VCD, с сохранением верного соотношения сторон
ReduceBy2
Crop(4,0,352,240)

Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и width должны быть чётными.

Альтернативный фильтр CropBottom полезен для обрезания мусор снизу видео-клипа захваченного с VHS кассеты. Он убирает count линий снизу каждого кадра


Фильтры для конвертации цветового пространства
ConvertToYUY2 / ConvertToRGB
ConvertToYUY2(clip)
ConvertToRGB(clip)

AVISynth способен внутри работать с двумя форматами цвета, RGB и YUY2. Описываемые два фильтра конвертируют между ними. Если видео уже в нужно формате, оно не изменяется
    В AVISynth следующие фильтры не поддерживают RGB формат:
  • SpatialSoften
  • TemporalSoften
  • FixLuminance
  • FixBrokenChromaUpsampling
  • PeculiarBlend
  • Все VirtualDub и VFAPI плагины.

Если вы попытаетесь использовать любой из этих фильтров с RGB источником, то получите ошибку. Вставка ConvertToYUY2 непосредственно перед вызвавшим её фильтром должно решить проблему. Все фильтры AVISynth поддерживают YUY2 формат.

В большинстве случаев в фильтре ConvertToRGB нет необходимости. Если выход AVISynth в YUY2 формате, а приложение ожидает RGB, системы использует установленный YUY2 кодек и выполнит преобразование. Однако, если кодек YUY2 не установлен, или если (как например в случае кодека ATI's YUY2) кодек преобразует из YUY2 в RGB неверно, можно использовать встроенный в AVISynth фильтр.

HuffYUV действует как системный YUY2 кодек если нет других установленных кодеков. Так что если вы установите HuffYUV и уберёте все другие YUY2 кодеки, вам никогда не понадобиться ConvertToRGB.

Пример:

# Имеется небольшое искажение вызываемое преобразованием между YUV и RGB
# Посмотрим, как это можно увидеть

control = ConvertToYUY2()
test1 = ConvertToRGB(ConvertToYUY2(ConvertToRGB(control)))
test2 = ConvertToYUY2(ConvertToRGB(ConvertToYUY2(test1)))
return Subtract(test2,control)


D
DelayAudio
DelayAudio(clip,seconds)

DelayAudio задерживает звуковую дорожку на seconds секунд. seconds может быть отрицательным и/или иметь дробную часть.

Пример:

# Воспроизводить аудио на полсекунды раньше
DelayAudio(-0.5)
DeleteFrame
DeleteFrame(clip,frame)

DeleteFrame удаляет один кадр, указанный аргументом. Звуковая дорожка не изменяется, так что если вы примените фильтр слишком много раз подряд то можете получить заметную десинхронизацию.

Если вы хотите удалить диапазон кадров (скажем от a до b) вместе с соответствующей частью фонограммы, это можно сделать примерно так: Trim(0,a-1) ++ Trim(b+1,0).
DirectShowSource
DirectShowSource("filename" [, FPS])

DirectShowSource читает filename используя DirectShow, та же система воспроизведения мультимедиа файлов, что используется в Windows Media Player. Метод может загрузить большинство форматов проигрываемых Windows Media Player, в том числе MPEG, MP3 и QuickTime, также как и AVI файлы не поддерживаемые AVISource (например DV type 1 или файлы использующие только DirectShow кодеки). Попытайтесь считать AVI файлы сначала посредством AVISource и если не сработает поменяйте на DirectShowSource
    Несколько предостережений:
  • Звук пока не поддерживается.
  • GRF файлы не поддерживаются (возможно поддержка появиться в следующих версиях).
  • Некоторые декодеры (замечено с MS MPEG-4) формирует видео кверх-ногами. Вам потребуется использовать FlipVertical.
  • От DirectShow видео-декодеров не требуется поддерживать точное, покадровое позиционирование и большинство не делают этого. Пока вы просто читаете видео последовательно, всё должно быть в порядке, но да помогут вам небеса, если вы пожелаете чего-то более сложного. Это ограничение не относиться к AVI файлам, или любым другим форматам которые имеют покадрово-точный DirectShow декодер.
  • От DirectShow видео-декодеров даже не сообщать вам частоту кадров входящего видео. Большинство сообщают, но ASF декодер нет. Возможно как-нибудь эта проблема решиться авто-анализом потока (как делал VirtualDub), но сейчас вы должны задавать частоту кадров, например DirectShowSource("video.asf", fps=15).
Dissolve
Dissolve(clip1,clip2[,...],overlap)

Dissolve похож на AlignedSplice исключая то, что клипы объединяются с перекрытием. Последние overlap кадров первого видео-потока смешиваются последовательно с первыми overlap кадрами второго видео-потока так, что потоки постепенно перетекают один в другой. Аудио-потоки смешиваются также.

Термин "dissolve (растворение)" временами используется для различных эффектов в которых переход скорее поточечный, чем градиентный. Фильтр этого не делает.
DoubleWeave
DoubleWeave(clip)

Если клип источник основан на полях, фильтр DoubleWeave ведёт себя как Weave, исключая то, что он формирует удвоенное число кадров вместо того, чтобы объединять поля 0 и 1 в кадр 0, поля 2 и 3 в кадр 1 и т.д., он объединяет поля 0 и 1 в кадр 0, поля 1 и 2 в кадр 1 и т.д.. Он не изменяет частоту кадров или их количество.

Если клип источник основан на кадрах, фильтр действует как если бы вы разделили его вначале на поля используя SeparateFields

Weave фактически просто псевдоним для DoubleWeave следующим за SelectEven

Более вероятно вы захотите использовать фильтр типа SeleceOdd или Pulldown после применения этого фильтра, если вы действительно не хотите видео с частотой кадров 50 или 60. Может выглядеть неэффективным чередовать каждую пару полей только чтобы немедленно выбросить половину получившихся кадров, Но фактически, так как AVISynth генерирует кадры только по требованию, ненужные кадры никогда не будут сгенерированы.

Если вы используете видео основанное на полях, такое как отснятое видео- камерой, вам вероятно не нужен этот фильтр. Но если вы обрабатываете NTSC видео конвертированное из FILM и планируете использовать фильтр Pulldown, вам необходимо вначале использовать DoubleWeave. Смотрите фильтр Pulldown для объяснений.

Если вы обрабатываете PAL видео конвертированное из FILM, Pulldown вам не нужен, но вы можете захотеть использовать DoubleWeave в следующей ситуации:
# Повторить функциональность фильтра VirtualDub "PAL deinterlace"
DoubleWeave
SelectOdd
DuplicateFrame
DuplicateFrame(clip,frame)

Фильтр DuplicateFrame противоположен DeleteFrame - он дублирует один кадр указанный в аргументе. Как и в случае DeleteFrame звуковая дорожка не меняется.


Отладка
Subtract
Subtract(clip1,clip2)

Subtract формирует выходной клип в котором каждый пиксель устанавливается в соответствии с разницей между соответствующими пикселями в clip1 и clip2. Более точно, он устанавливается (50% gray) + (clip1 pixel) - (clip2 pixel). Вы можете использовать Levels после, если желаете повысить контраст. К примеру:
# Сделать разницу между clip1 и clip2 явно очевидной Subtract(clip1,clip2).Levels(127,1,129,0,255)

Если хотите в деталях увидеть разнице между смежными кадрами, можете использовать код:
Subtract(clip.Trim(1,0),clip)
ShowFrameNumber
ShowFrameNumber(clip)

ShowFrameNumber отрисовывает текст на каждом кадре показывающий каким AVISynth считает его номер. Фильтр иногда полезен при написании скриптов. Если вы примените дополнительные фильтры после ShowFrameNumber, будут рассматривать текст в кадре просто как часть картинки, так что номер может быть искажён к тому времени, как вы его увидите.
ShowSMPTE
ShowSMPTE(clip,fps)

Фильтр ShowSMPTE аналогичен ShowFrameNumber, но показывает код времени SMPTE (часы:минуты:ссекунды:кадр). Аргумент fps необходим и должен быть 24, 25, 30 или 29.97.
StackHorizontal / StackVertical
StackHorizontal(clip1,clip2[,...])
StackVertical(clip1,clip2[,...])

StackHorizontal берёт два видео-клипа и показывает их вместе слева-на-право. Высоты изображений и их цветовые форматы должны совпадать. Остальная информация (звуковая дорожка, частота кадров и т.д.) в основном берётся из первого клипа. StackVertical делает тоже самое, но сверху-вниз. Например:

Примеры

# Сравнение кадров с и без подавления шума
StackVertical(last, last.SpatialSoften(2,3,6))

# Располагает клипы переменных a, b, c, d квадратом:
# a b
# c d
StackVertical(StackHorizontal(a,b),StackHorizontal(c,d))
ShowFiveVersions
ShowFiveVersions(clip1,clip2,clip3,clip4,clip5)

ShowFiveVersions берёт пять видео-потоков и соединяет их в зигзагообразном порядке слева на право. Единственное применение для этого - помочь найти структуру NTSC "3:2 pulldown". Этого можно добиться используя такой код:
# Наблюдать все пять структур 3:2 pulldown сразу

DoubleWeave()
# Встаете фильтр изменения размера если надо (см. ниже)
a = Pulldown(0,2).Subtitle("0,2")
b = Pulldown(1,3).Subtitle("1,3")
c = Pulldown(2,4).Subtitle("2,4")
d = Pulldown(0,3).Subtitle("0,3")
e = Pulldown(1,4).Subtitle("1,4")
ShowFiveVersions(a,b,c,d,e)

Этот код показывает пять структур "3:2 pulldown" с добавленным текстом идентифицирующим каждую из них. Затем просматривая конечный фильм можно выбрать структуру не содержащую смешанных кадров. (При обычном "3:2 pulldown" должно быть две одинаково хороших. Посмотрите на диаграмму в описании для фильтра Pulldown и поймёте почему.) Если ни одна из пяти не подходит, то вы имеете дело с одной из более извращённых форм "3:2 pulldown" и вам может понадобиться использовать PeculiarBlend.

Кстати, если вы планируете захватывать в высоком разрешении и затем масштабировать к нужному размеру, как рекомендовалось, вы возможно должны поместить ReduceBy2 или BilinearResize или что-нибудь сразу после команды DoubleWeave в вышерасположенном коде, до DoubleWeave это сработает неверно, а если отложите на будущее, ShowFiveVersions сформирует по-настоящему большой кадр.
FlipVertical
FlipVertical(clip)

Фильтр FlipVertical поворачивает видео сверху вниз. Полезно при работе с ошибающимися видео-кодеками.


Методы для монтажа
Trim
Trim(clip,first-frame,last-frame)

Trim вырезает часть видео-клипа включающую только кадры с first-frame до last-frame. Звук также вырезается и остаётся синхронизированным. Передача 0 для last-frame означает "конец клипа". К примеру:
Trim(100,0) # удалить первые 100 кадров
AlignedSplice / UnalignedSplice
AlignedSplice(clip1,clip2[,...])
UnalignedSplice(clip1,clip2[,...])

AlignedSplice и UnalignedSplice соединяют два или более видео-клипов непрерывно. Различие между фильтрами лежит в том, как они обращаются со звуковыми дорожками. UnalignedSplice просто соединяет их без внимания к синхронизации с видео. AlignedSplice обрезает первую звуковую дорожку или вставляет тишину, смотря что требуется для гарантии сохранения синхронизации с видео второй звуковой дорожки.

Вы должны использовать UnalignedSplice когда объединяемые фонограммы были исходно непрерывны - к примеру, когда вы объединяете файлы захваченные в AVI_IO. Небольшие ошибки отсчётов времени могут вести к щелчкам в звуке если вы примните AlignedSplice в такой ситуации.

Скриптовый язык AVISynth предоставляет + и ++ как синонимы для UnalignedSplice и AlignedSplice соответственно
Пример 1:
# Объединить сегментированный файл захвата для формирования цельного клипа
UnalignedSplice(AVISource("capture1.avi"), AVISource("capture2.avi"), AVISource("capture3.avi"))
# или: AVISource("capture1.avi") + AVISource("capture2.avi") + AVISource("capture3.avi")
Пример 2:
# Извлечь три сцены из клипа и объединить их вместе в новом порядке
AVISource("video.avi")
edited_video = Trim(2000,2500) ++ Trim(3000,3500) ++ Trim(1000,1500)
Dissolve
Dissolve(clip1,clip2[,...],overlap)

Dissolve похож на AlignedSplice исключая то, что клипы объединяются с перекрытием. Последние overlap кадров первого видео-потока смешиваются последовательно с первыми overlap кадрами второго видео-потока так, что потоки постепенно перетекают один в другой. Аудио-потоки смешиваются также.

Термин "dissolve (растворение)" временами используется для различных эффектов в которых переход скорее поточечный, чем градиентный. Фильтр этого не делает.
Reverse
Reverse(clip)

Фильтр делает клип играющий в обратном направлении. Это применимо для наблюдения идущих задом наперед людей, во время прослушивания скрытых сатанинских посланий.
FadeOut / FadeOut2
FadeOut(clip,number-of-frames)
FadeOut2(clip,number-of-frames)

FadeOut и FadeOut2 делают видео-поток линейно затухающим в чёрный. Звуковая дорожка (если есть) также линейно заглушается в тишину. Эффект затухания действует только последние number-of-frames кадров видео. Последний кадр видео становиться практически-но-ещё-не-совсем чёрным. Дополнительно совершенно чёрный кадр добавляется в конец, увеличивая таким образом общее число кадров на один.

FadeOut2 работает также, не считая добавления двух чёрных кадров вместо одного. Единственная цель этого - обойти ошибку в Window Media Player. Все проверенные версии WMP не воспроизводят последний кадр MPEG файла - вместо этого они останавливаются на предпоследнем кадре когда воспроизведение завершается. Это оставляет показанным на экране неприглядный практически-но-ещё-не-совсем чёрный кадр по завершении фильма, если вы используете FadeOut. FadeOut2 избегает эту проблему.

FadeOut(n,clip) просто псевдоним для Dissolve(clip,Blackness(n+1,clip),n) (или n+2 вместо n+1 для FadeOut). Нет подобного фильтра FadeIn, но можно получить тот-же эффект обращением аргументов Dissolve: Dissolve(Blackness(n+1,clip),clip,n).
SelectEven / SelectOdd
SelectEven(clip)
SelectOdd(clip)

SelectEven делает выходной видео-поток используя только кадры входного видео-потока с чётными номерами. SelectOdd - его нечётное дополнение.

Так как кадры нумеруются с нуля, SelectEven фактически выбирает первый, третий, пятый, ... кадры по человеческому соглашению счёта.
Pulldown
Pulldown(clip,a,b)

Фильтр Pulldown просто выбирает два из каждых пяти кадров видеоисточника. Частота кадров уменьшается к двум третьим своего исходного значения. К примеру, Pulldown 0, 2 выберет кадры 0,2,5,7,10,12 и т.д.

Разработан для использования после DoubleWeave, и его цель - восстановление исходной частоты кадров фильма который был конвертирован в видео с применением процесса "3:2 pulldown".

Причина, по которой необходимо в начале использовать DoubleWeave в том, что карты захвата соединяют поля неверным образом. В терминах полей, последовательность 3:2 pulldown просто "A A B B B C C D D D ...", где символы с "A" по "D" представляют исходные кадры фильма. Но карты захвата соединяют поля в кадры без соблюдения структуры "3:2 pulldown", и в результате получается вот что:

A   B   C   D   D    (30fps)
A   B   B   C   D

В такой структуре кадр "C" никогда сам не возникает. После DoubleWeave каждая пара полей приобретает её собственный кадр, так что видео поток начинается так:

A A B B C C D D D    (60fps)
A B B B B C C D D
*     *   *     *

Теперь каждый кадр фильма имеет как минимум один свой кадр видео. В этом месте фильтр Pulldown с аргументами 0, 3 выберет кадры отмеченные "*" и вы получите

A     B   C     D    (24fps)
A     B   C     D

... то, что вам действительно нужно.

Очень сложно объяснить, но восстановление после "3:2 pulldown" это просто вопрос вставки шаблонного кода. Посмотрите приме для ShowFiveVersions.

Pulldown(a,b) внутренне реализован как SelectEvery(5,a,b).AssumeFrameBased.
Interleave
Interleave(clip,clip[,...])

Interleave чередует кадры из нескольких клипов по принципу кадр-за-кадром, так, к примеру, если вы дадите три аргумента, первые три кадры видеовыхода будут первыми кадрами трёх клипов источников, следующие три - вторыми кадрами видеоисточников и т.д..
SelectEvery
SelectEvery(clip,step-size[,offset1[,offset2[,...]]])

SelectEvery это обобщение таких фильтров, как SelectEven и Pulldown. Проще всего описать фильтр на примере:
SelectEvery(clip,2,0) # идентично SelectEven(clip)
SelectEvery(clip,2,1) # идентично SelectOdd(clip)
SelectEvery(clip,10,3,6,7) # выбрать кадры 3,6,7,13,16,17,23,26,27... из клипа источника
SelectEvery(clip,9) # выбрать кадры 0,9,18,27,... (второй аргумент предполагается равным 0)

Или вот так
# Взять прогрессивный клип 24FPS и применить "3:2 pulldown"
# получая на выходе чересстрочный клип 30FPS
AssumeFrameBased
SeparateFields
SelectEvery(8, 0,1, 2,3,2, 5,4, 7,6,7)
Weave


F
FadeOut / FadeOut2
FadeOut(clip,number-of-frames)
FadeOut2(clip,number-of-frames)

FadeOut и FadeOut2 делают видео-поток линейно затухающим в чёрный. Звуковая дорожка (если есть) также линейно заглушается в тишину. Эффект затухания действует только последние number-of-frames кадров видео. Последний кадр видео становиться практически-но-ещё-не-совсем чёрным. Дополнительно совершенно чёрный кадр добавляется в конец, увеличивая таким образом общее число кадров на один.

FadeOut2 работает также, не считая добавления двух чёрных кадров вместо одного. Единственная цель этого - обойти ошибку в Window Media Player. Все проверенные версии WMP не воспроизводят последний кадр MPEG файла - вместо этого они останавливаются на предпоследнем кадре когда воспроизведение завершается. Это оставляет показанным на экране неприглядный практически-но-ещё-не-совсем чёрный кадр по завершении фильма, если вы используете FadeOut. FadeOut2 избегает эту проблему.

FadeOut(n,clip) просто псевдоним для Dissolve(clip,Blackness(n+1,clip),n) (или n+2 вместо n+1 для FadeOut). Нет подобного фильтра FadeIn, но можно получить тот-же эффект обращением аргументов Dissolve: Dissolve(Blackness(n+1,clip),clip,n).
FixBrokenChromaUpsampling
FixBrokenChromaUpsampling(clip)

Замечено, что MS DV кодек обрабатывает цветовые каналы неверно, что может быть компенсировано фильтром FixBrokenChromaUpsampling. Вы должны поместить его после DirectShowSource, в случае использования MS DV кодека, или если вы заметите грязные линии появляющиеся в чересстрочных изображениях.
FixLuminance
FixLuminance(clip,intercept,slope)

Видеомагнитофон иногда имеет раздражающую привычку повышать яркость снизу в верх у каждого кадра. Цель этого фильтра последовательное затемнение верха изображения для компенсации. Если с вашим видеомагнитофоном всё в порядке, можете считать что этого фильтра нет.

Этот фильтр работает только в цветовом пространстве YUY2.
FlipVertical
FlipVertical(clip)

Фильтр FlipVertical поворачивает видео сверху вниз. Полезно при работе с ошибающимися видео-кодеками.
FreezeFrame
FreezeFrame(clip,first-frame,last-frame,source-frame)

Фильтр FreezeFrame заменяет все кадры между firts-frame и last-frame копиями source-frame. Звуковая дорожка не изменяется. Фильтр удобен для покрытия проблемных кадров в видео в случае когда вы имеете похожие кадры не имеющие проблем.


Методы для изменения частоты кадров
AssumeFPS
AssumeFPS(clip,new_fps[,sync_audio])

Команда AssumeFPS изменяет частоту кадров без изменения их числа (в результате видео воспроизводиться быстрее или медленнее); если sync_audio имеет значение "истина", то частота дискретизации звука также меняется необходимым образом.
ChangeFPS
ChangeFPS(clip,new_fps)

Команда ChangeFPS изменяет частоту кадров удаляя или добавляя их для сохранения скорости воспроизведения.


Методы для работы с отдельными кадрами
FreezeFrame
FreezeFrame(clip,first-frame,last-frame,source-frame)

Фильтр FreezeFrame заменяет все кадры между firts-frame и last-frame копиями source-frame. Звуковая дорожка не изменяется. Фильтр удобен для покрытия проблемных кадров в видео в случае когда вы имеете похожие кадры не имеющие проблем.
DeleteFrame
DeleteFrame(clip,frame)

DeleteFrame удаляет один кадр, указанный аргументом. Звуковая дорожка не изменяется, так что если вы примените фильтр слишком много раз подряд то можете получить заметную десинхронизацию.

Если вы хотите удалить диапазон кадров (скажем от a до b) вместе с соответствующей частью фонограммы, это можно сделать примерно так: Trim(0,a-1) ++ Trim(b+1,0).
DuplicateFrame
DuplicateFrame(clip,frame)

Фильтр DuplicateFrame противоположен DeleteFrame - он дублирует один кадр указанный в аргументе. Как и в случае DeleteFrame звуковая дорожка не меняется.


H
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub 2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.


I
IPCSource
IPCSource("name")

IPCSource открывает коммуникационный канал с AVISynth-совместимым фрейм-сервером работающим в пространстве иного процесса на той же машине. IPC - сокращение от "inter-process communication" - меж-процессное взаимодействие. На текущий момент поддерживается только плагин для Premiere и FlasK. Возможно фрейм-сервер AVISynth будет сделан совместимым с VirtualDub, но на текущий момент этого нет. VDR файлы вы можете открывать командой AVISource.
Interleave
Interleave(clip,clip[,...])

Interleave чередует кадры из нескольких клипов по принципу кадр-за-кадром, так, к примеру, если вы дадите три аргумента, первые три кадры видеовыхода будут первыми кадрами трёх клипов источников, следующие три - вторыми кадрами видеоисточников и т.д..


Фильтры для обработки изображения
Levels
Levels(clip,input_low,gamma,input_high,output_low,output_high)

Фильтр Levels настраивает яркость, контраст и гамму. Параметры input_low и input_high определяют какое входное значение пикселя воспринимается как чисто чёрный и чисто белый; параметры output_low и output_high определяют выходные значения соответствующие чёрному и белому; и параметр gamma контролирует степень нелинейности в преобразовании. Более точно функция конвертации следующая:

output = [(input - input_low) / (input_high - input_low)]1/gamma (output_high - output_low) + output_low

Это один из фильтров, для которых на самом деле неплохо было бы иметь графический интерфейс (GUI). Так как сделать GUI не представляется возможным, фильтр сделан совместимым с аналогичным фильтром VirtualDub. Вы можете брать числа из диалога настройки фильтра "Levels" в VirtualDub и подставлять их в качестве параметров фильтра Levels в AVISynth получая те же результаты.

Работая в пространстве цвета YUY2, Levels выполняет корректировку только для яркостной составляющей, не для цветовой. Gamma-коррекция, вообще говоря, концепция цветового пространства RGB, и неясно, как выполнить её правильно в YUY2. Однако, если gamma=1.0, фильтр должен иметь одинаковый эффект как в RGB, так и в YUY2 режимах.

Примеры

# нулевой эффект
Levels 0,1,255,0,255

# gamma-корректировка для отображения в ярком окружении
Levels 0,1.3,255,0,255

# инвертирует изображение (делает фото-негатив)
Levels 0,1,255,255,0
Blur / Sharpen
Blur(clip,amount)
Sharpen(clip,amount)

Фильтр использует простую 3x3 размывающую или обостряющую матрицу весов пикселов. Наибольший допустимый аргумент для Blur около 1.58, который соответствует равномерному размытию 3x3 пикселя. Значение 1.0 даёт вам веса пикселов (1/4, 1/2, 1/4). Если вам требуется Гауссовское размытие большего радиуса, примените несколько копий Blur(1.0) последовательно.

Отрицательные значения для Blur на самом деле повышают резкость изображения, и фактически Sharpen просто псевдоним для Blur(- n). Наименьшее допустимое значение для Blur - -1.0, и наибольшее для Sharpen - 1.0
SpatialSoften / TemporalSoften
SpatialSoften(clip,radius,luma_threshold,chroma_threshold)
TemporalSoften(clip,radius,luma_threshold,chroma_threshold)

Фильтры SpatialSoften и TemporalSoften удаляют шум из видео-клипа выборочно смешивая пиксели. Это фильтры могут творить чудеса, и весьма рекомендуется попытаться использовать их. Но они также могут стереть мелкие детали если пороги слишком высоки, поэтому не перестарайтесь. И они очень медленны, особенно с большими значениями радиуса, поэтому не включайте их до тех пор, пока всё остальное не будет готово.

SpatialSoften заменяет каждый пиксель в кадре средним всех соседних выборок отличающихся от центральной выборки не более чем на указанное пороговое значение. "Соседний" значит пиксель не далее чем на +/- radius в направлениях X и Y. Пороги используются как luma_threshold для Y (яркостной составляющей) выборок, и chroma_threshold для U и V (цветовой составляющей) выборок.

TemporalSoften аналогичен, исключая то, что он просматривает один и тот же пиксель в соседних кадрах. Используются все кадры не далее чем на +/- radius отстоящие от центрального. Этот фильтр не выглядит столь же эффективным, как SpatialSoften.

Рекомендуется "поиграть" с параметрами для этих фильтров, чтобы получить представление о том, что они делают - к примеру попробуйте установить одному из трёх параметров очень высокое значение, оставляя другие с низким, и смотрите что выйдет. Помните, что установка любого из параметров в 0.0 станет причиной очень медленного ничего-ни-делания.

В AVISynth, SpatialSoften и TemporalSoften работают только в пространстве цвета YUY2. Можно использовать ConvertToYUY2 фильтр если исходный видео-клип не в YUY2 формате.
FixLuminance
FixLuminance(clip,intercept,slope)

Видеомагнитофон иногда имеет раздражающую привычку повышать яркость снизу в верх у каждого кадра. Цель этого фильтра последовательное затемнение верха изображения для компенсации. Если с вашим видеомагнитофоном всё в порядке, можете считать что этого фильтра нет.

Этот фильтр работает только в цветовом пространстве YUY2.
FixBrokenChromaUpsampling
FixBrokenChromaUpsampling(clip)

Замечено, что MS DV кодек обрабатывает цветовые каналы неверно, что может быть компенсировано фильтром FixBrokenChromaUpsampling. Вы должны поместить его после DirectShowSource, в случае использования MS DV кодека, или если вы заметите грязные линии появляющиеся в чересстрочных изображениях.
Letterbox
Letterbox(clip,top,bottom)

Letterbox просто зачерняет верхние top и нижние bottom строки каждого кадра. Фильтр применим в двух случаях: во-первых он может убрать паразитный шум видео с существующих чёрных полос изображения; во-вторых он может убрать замусоренные строки, часто возникающие внизу кадра при захвате с плёнок VHS

Действие Letterbox может быть повторено комбинацией фильтров Crop и AddBorders, но Letterbox быстрее и проще

Обычно, лучше обрезать фильтром Crop или CropBottom чем прятать используя Letterbox. Однако, в некоторых случаях, особенно если вы кодируете в MPEG, лучше использовать Letterbox, что позволяет сохранять стандартные размеры кадра, такие как 352x288 или 320x240. Некоторые MPEG проигрыватели не понимают видео имеющее нестандартный размер кадра.
Subtitle
Subtitle(clip,"text",x,y,first-frame,last-frame,"font-name",point-size[,text-color[,halo-color]])
Subtitle(clip,"text")

Фильтр Subtitle добавляет строку сглаженного текста в последовательность кадров. Если вы желаете более одно субтитра, или субтитр содержащий более одной строки, вы должны сцепить вместе несколько фильтров Subtitle. Этот фильтр очевидно неприменим для чего-то большего, чем случайное использование.

Цвет текста и ореола должны быть заданы как шестнадцатеричное RGB значение, как в HTML, не считая того, что начинается оно с $ вместо #. (# Используется для комментирования).

Альтернативная, краткая форма полезна когда вас не беспокоит, как выглядят субтитры до тех пор, пока вы их видите. К примеру, когда вы используете фильтр StackVertical, который покажет несколько вариантов кадра сразу, и желаете пометить их, чтобы помнить что есть что.

AVISynth использует фильтр внутри для метода Version и для вывода сообщений об ошибках. Ещё механизм субтитров используется в ShowFrameNumber.
PeculiarBlend
PeculiarBlend(clip,cutoff)

Фильтр смешивает каждый кадр с последующим особым образом. Часть кадра ниже cutoff строк не изменяется. Часть выше cutoff-30 строк заменяется соответствующей частью следующего кадра. 30 строк в середине смешиваются последовательно, чтобы скрыть переключение кадров.

Может возникнуть вопрос, кому нужен этот фильтр. Что ж, дело вот в чём. Ко многим видео-клипам исходно снятым на плёнку применена техника 3:2 pulldown, описанная в описании фильтра Pulldown. Однако некоторые используют более неприятную систему в которой пересечение со следующим кадром происходит в середине поля. Другими словами индивидуальные поля как один кадр фильма вверху и другой внизу. Этот специфический эффект фильтр частично исправляет. Он должен использоваться после или до фильтра Pulldown. Чтобы определить cutoff, изучите смешанный таким образом кадр и установите cutoff в номер первой строки, где вы заметите смешивание.

В AVISynth, фильтр работает только в пространстве цветов YUY2. Можно использовать фильтр ConvertToYUY2 если источник не YUY2.


Фильтры для работы с черезстрочным видео
AssumeFrameBased / AssumeFieldBased
AssumeFrameBased(clip)
AssumeFieldBased(clip)

AVISynth следит, является клип основанным на полях или кадрах. Если клип основан на полях, то также сохраняется соотношение каждого поля (какое оно, верхние или нижнее поле кадра). Если клип основан на кадрах, то сохраняется порядок полей в кадре (т.е. какое поле в кадре идёт первым, когда они разделяются)

Однако эта информация необязательно верна, так как информация о полях обычно не хранится в видео-файлах и AVISynth методы источники только предполагают её. AssumeFrameBased и AssumeFieldBased позволяют вам сказать AVISynth истинный тип клипа.

AssumeFrameBased выбрасывает существующую информацию и считает, что клип является основанным на кадрах, с нижним (чётным) полем первым в каждом кадре. (Метод-источник делает так). Если вы желаете верхнее поле быть первым, используйте после ComplementParity.

AssumeFieldBased выбрасывает существующую информацию и считает, что клип является основанным на полях, с четными полями внизу и нечётными полями вверху. Если вы хотите расположить их наоборот, используйте после ComplementParity.
ComplementParity
ComplementParity(clip)

Если клип основан на полях, ComplementParity меняет верхние поля на нижние и наоборот. Если клип основан на кадрах, фильтр изменяет порядок полей в кадре (нижнее -> первое на верхнее -> первое и наоборот).
SeparateFields
SeparateFields(clip)

NTSC и PAL видеосигналы это последовательности полей, но все известные карты захвата видео захватывают два поля сразу и "interlace" - чередуют (или "weave" - сплетают) их в кадры. Так кадр 0 в захваченном файле содержит поля 0 и 1; кадр 1 содержит поля 2 и 3; и т.д. SeparateFields берёт основанный на кадрах клип и разделяет каждый кадр на составляющие его поля, формируя новый клип с удвоенной частотой и числом кадров. Это полезно, если вы хотите использовать Trim и тому подобные фильтры с точностью до одного поля.

SeparateFields использует информацию о порядке полей клипа источника для решения которое из каждой пары полей выводится первым. Если порядок неверен, используйте ComplementParity перед SeparateFields. Если результат все равно неверен, возможно стоит использовать также и AssumeFrameBased

Фильтр ничего не делает, если клип уже основан на полях.
Weave
Weave(clip)

Фильтр Weave противоположен SeparateFields. Он берёт пары полей исходного видео-клипа и соединяет их вместе для создания чересстрочных кадров. Новый клип имеет уменьшенные на половину частоту кадров и их число. Weave использует информацию о соответствии кадров клипа источника решая какое поле расположить наверху. Если порядок неверен используйте ComplementParity до или SwapFields после.

Все фильтры AVISynth сохраняют информацию о последовательности полей, ты что Weave всегда объединит поля вместе в правильном порядке. Если вы хотите изменить его, используйте ComplementParity до или SwapFields после.

Фильтр ничего не делает, если клип уже основан на кадрах.
DoubleWeave
DoubleWeave(clip)

Если клип источник основан на полях, фильтр DoubleWeave ведёт себя как Weave, исключая то, что он формирует удвоенное число кадров вместо того, чтобы объединять поля 0 и 1 в кадр 0, поля 2 и 3 в кадр 1 и т.д., он объединяет поля 0 и 1 в кадр 0, поля 1 и 2 в кадр 1 и т.д.. Он не изменяет частоту кадров или их количество.

Если клип источник основан на кадрах, фильтр действует как если бы вы разделили его вначале на поля используя SeparateFields

Weave фактически просто псевдоним для DoubleWeave следующим за SelectEven

Более вероятно вы захотите использовать фильтр типа SeleceOdd или Pulldown после применения этого фильтра, если вы действительно не хотите видео с частотой кадров 50 или 60. Может выглядеть неэффективным чередовать каждую пару полей только чтобы немедленно выбросить половину получившихся кадров, Но фактически, так как AVISynth генерирует кадры только по требованию, ненужные кадры никогда не будут сгенерированы.

Если вы используете видео основанное на полях, такое как отснятое видео- камерой, вам вероятно не нужен этот фильтр. Но если вы обрабатываете NTSC видео конвертированное из FILM и планируете использовать фильтр Pulldown, вам необходимо вначале использовать DoubleWeave. Смотрите фильтр Pulldown для объяснений.

Если вы обрабатываете PAL видео конвертированное из FILM, Pulldown вам не нужен, но вы можете захотеть использовать DoubleWeave в следующей ситуации:
# Повторить функциональность фильтра VirtualDub "PAL deinterlace"
DoubleWeave
SelectOdd
Bob
Bob(clip[,b,c][,height])

Bob берёт клип и убирает "гребёнку" следующим образом. Фильтр увеличивает каждое поля до размеров целого кадра интерполяцией между строками. Верхнее поле немного сдвигается вверх в сравнении с нижним, так что картинка на самом деле не прыгает вверх-вниз. Однако, она начинает "мерцать" на стационарных сценах, так как интерполяция на самом деле не восстанавливает другое поле достаточно точно.

Фильтр использует BicubicResize для грязной работы. Вы можете указывать ему значения b и с. Также вы можете воспользоваться случаем изменить вертикальное разрешение параметром height.
SwapFields
SwapFields(clip)

Фильтр SwapFields меняет местами строку 0 со строкой 1, строку 2 со строкой 3 и т.д., что эффективно меняет местами два поля в чересстрочном кадре. Тоже самое делает SeparateFields.ComplementParity.Weave (и именно так фильтр реализован).


L
Letterbox
Letterbox(clip,top,bottom)

Letterbox просто зачерняет верхние top и нижние bottom строки каждого кадра. Фильтр применим в двух случаях: во-первых он может убрать паразитный шум видео с существующих чёрных полос изображения; во-вторых он может убрать замусоренные строки, часто возникающие внизу кадра при захвате с плёнок VHS

Действие Letterbox может быть повторено комбинацией фильтров Crop и AddBorders, но Letterbox быстрее и проще

Обычно, лучше обрезать фильтром Crop или CropBottom чем прятать используя Letterbox. Однако, в некоторых случаях, особенно если вы кодируете в MPEG, лучше использовать Letterbox, что позволяет сохранять стандартные размеры кадра, такие как 352x288 или 320x240. Некоторые MPEG проигрыватели не понимают видео имеющее нестандартный размер кадра.
Levels
Levels(clip,input_low,gamma,input_high,output_low,output_high)

Фильтр Levels настраивает яркость, контраст и гамму. Параметры input_low и input_high определяют какое входное значение пикселя воспринимается как чисто чёрный и чисто белый; параметры output_low и output_high определяют выходные значения соответствующие чёрному и белому; и параметр gamma контролирует степень нелинейности в преобразовании. Более точно функция конвертации следующая:

output = [(input - input_low) / (input_high - input_low)]1/gamma (output_high - output_low) + output_low

Это один из фильтров, для которых на самом деле неплохо было бы иметь графический интерфейс (GUI). Так как сделать GUI не представляется возможным, фильтр сделан совместимым с аналогичным фильтром VirtualDub. Вы можете брать числа из диалога настройки фильтра "Levels" в VirtualDub и подставлять их в качестве параметров фильтра Levels в AVISynth получая те же результаты.

Работая в пространстве цвета YUY2, Levels выполняет корректировку только для яркостной составляющей, не для цветовой. Gamma-коррекция, вообще говоря, концепция цветового пространства RGB, и неясно, как выполнить её правильно в YUY2. Однако, если gamma=1.0, фильтр должен иметь одинаковый эффект как в RGB, так и в YUY2 режимах.

Примеры

# нулевой эффект
Levels 0,1,255,0,255

# gamma-корректировка для отображения в ярком окружении
Levels 0,1.3,255,0,255

# инвертирует изображение (делает фото-негатив)
Levels 0,1,255,255,0
LoadPlugin / LoadVirtualdubPlugin / LoadVFAPIPlugin
LoadPlugin("plugin-file-name"[,...])
LoadVFAPIPlugin("plugin-file-name", "new-command-name")
LoadVirtualdubPlugin("plugin-file-name", "new-command-name", prelol)

LoadPlugin передаётся аргумент, являющийся именем файл с исполняемым кодом подключаемого фильтра совместимого с AVISynth. После загрузки, становятся доступны новые команды реализуемые данным подгружаемым фильтром. Загруженные фильтры способны работать в цветовых пространствах YUY2 и RGB.

В методы LoadVFAPIPlugin и LoadVirtualdubPlugin загружают плагины TMPGEnc и VirtualDub соответственно. Загруженный фильтр будет доступен под указанным именем может работать только в цветовом пространстве RGB. Поэтому менее удобен нежели LoadPlugin.

Некоторые фильтры VirtualDub загруженные посредством LoadVirtualdubPlugin зависят от предыдущих кадров; для таких фильтров prelol должен быть не меньше числа кадров которые фильтру необходимых предварительно обработать для заполнения его буферов и обновления внутренних переменных. Удобный интерфейс в стиле AVISynth ко многим фильтрам VirtualDub можно найти в файле vdfilters.avs включённом в дистрибутив AVISynth (хотя этот файл несколько устарел). Для его использования исправьте переменную VirtualDub_plugin_directory в начале файла чтобы она содержала путь к папке содержащей плагины VirtualDub и включите этот файл в свой скрипт (посредством метода Import).

Примеры

# Загрузка фильтра выполняющего IVTC и его вызов
LoadPlugIn("q:\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
InverseTelecine(40,10,15)

# Загрузка фильтра VirtualDub "Smart Smoother", автор Donald Graft

LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smooth.vdf", "_VD_SmartSmoother", 1)
SegmentedAviSource("D:\capture.avi")
_VD_SmartSmoother(default(diameter,5), default(threshold,25), default(interlaced,false)?1:0)


M
MessageClip
MessageClip("message",width,height,shrink,text_color,halo_color,bg_color)

MessageClip формирует клип содержащий текстовое сообщение. Метод используется внутренне для сообщения об ошибках. Используется фонт Arial, размер между 24 и 9 пунктов выбирается для лучшего сочетания, если возможно, ширины и высоты. Если shrink имеет значение "истина", то разрешение клипа уменьшается, если необходимо, чтобы соответствовать тексту.


Мета-фильтры
Animate
Animate(start-frame,end-frame,"filter",start-args,end-args)

Animate это мета-фильтр, который вычисляет свой параметр filter с непрерывно изменяемыми аргументами. В кадре start-frame и ранее, фильтр вычисляется с аргументами заданными в start-args. В кадре end-frame и позднее, фильтр вычисляется с аргументами заданными в end-args. В середине, аргументы линейно интерполируются для гладкого перехода.

Аргумент filter должен быть заключён в символы цитирования, и два вложенных списка аргументов не заключены в скобки. Строки и видео-клипы не могут интерполироваться, и значит должны совпадать в обоих списках аргументов. Вы не можете использовать запись в стиле ООП или предполагать last в этом filter, даже если обычно filter позволяет такое в своих аргументах.

Фильтр некорректно обрабатывает изменение звуковой дорожки, так что не рекомендуется применять его с фильтрами(filter) которые её изменяют. И во имя неба не давайте начальных и конечных параметров приводящих к различным размерам кадра.

Аргумент filter может также быть Animate если вы хотите квадратичную, а не линейную интерполяцию, но если об этом слишком много думать, то голова может разлететься.

Примеры

# Сделать скроллинг для "Version" видео

ver = Version()
return Animate(0,149,"Crop",ver,0,0,64,32,ver,448,0,64,32)

# Растворить(Fade) в белое

Animate(100,200,"Levels",last,0,1,255,0,255,last,0,1,255,255,255)

# Выполнить постепенное увеличение из центра видео 320x240,
# начиная с увеличения 1:1 в кадре 100 и кончая увеличением
# 4:1 в кадре 200

Animate(100,200, "BicubicResize",last,0,0,320,240,320,240,last,120,90,80,60,320,240)

# Сделать текст "Hello, World!" увеличивающимся из центра видео 320x240

Animate(0,48,"Subtitle",last,"Hello, World!",160,120,0,99999,"Arial",last,0,"Hello, World!",25,130,0,99999,"Arial",48)


O
AVISource / OpenDMLSource / AVIFileSource / WAVSource
AVISource("filename")
OpenDMLSource("filename")
AVIFileSource("filename")
WAVSource("filename")

AVISource передаётся один аргумент, являющийся именем файла в кавычках. Метод пытается считать этот файл используя либо интерфейс "Video-for-Windows" либо встроенный OpenDML код (перенесённый из VirtualDub). Фильтр способен загрузить любой файл, для которого существует AVIFile обработчик. Сюда включаются не только AVI файлы, но и WAV, AVS (скрипт AVISynth) и VDR (фрейм-сервер VirtualDub).

Метод AVISource определяет тип файла и вызывает наиболее соответствующий AVIFile или OpenDML обработчик. В случае, если открыть файл таким образом не удаётся, можно использовать OpenDMLSource или AVIFileSource, явно указывая какой тип обработчика использовать. Оба фильтра способны читать обычные (>2GB) AVI файлы. Но только через OpenDML можно работать с файлами большего размера, и только AVIFile открывает не AVI файлы (WAV, VDR, AVS).

Примеры

AVISource("d:\capture.avi") # Замечание C-программистам: обратный слеш не дублируется.
AVISource("c:/capture/00.avi") # прямой слеш также работает
AVISource("f:\soundtrack.wav") # это работает
WAVSource("f:\soundtrack.wav") # и это тоже


P
PeculiarBlend
PeculiarBlend(clip,cutoff)

Фильтр смешивает каждый кадр с последующим особым образом. Часть кадра ниже cutoff строк не изменяется. Часть выше cutoff-30 строк заменяется соответствующей частью следующего кадра. 30 строк в середине смешиваются последовательно, чтобы скрыть переключение кадров.

Может возникнуть вопрос, кому нужен этот фильтр. Что ж, дело вот в чём. Ко многим видео-клипам исходно снятым на плёнку применена техника 3:2 pulldown, описанная в описании фильтра Pulldown. Однако некоторые используют более неприятную систему в которой пересечение со следующим кадром происходит в середине поля. Другими словами индивидуальные поля как один кадр фильма вверху и другой внизу. Этот специфический эффект фильтр частично исправляет. Он должен использоваться после или до фильтра Pulldown. Чтобы определить cutoff, изучите смешанный таким образом кадр и установите cutoff в номер первой строки, где вы заметите смешивание.

В AVISynth, фильтр работает только в пространстве цветов YUY2. Можно использовать фильтр ConvertToYUY2 если источник не YUY2.
Pulldown
Pulldown(clip,a,b)

Фильтр Pulldown просто выбирает два из каждых пяти кадров видеоисточника. Частота кадров уменьшается к двум третьим своего исходного значения. К примеру, Pulldown 0, 2 выберет кадры 0,2,5,7,10,12 и т.д.

Разработан для использования после DoubleWeave, и его цель - восстановление исходной частоты кадров фильма который был конвертирован в видео с применением процесса "3:2 pulldown".

Причина, по которой необходимо в начале использовать DoubleWeave в том, что карты захвата соединяют поля неверным образом. В терминах полей, последовательность 3:2 pulldown просто "A A B B B C C D D D ...", где символы с "A" по "D" представляют исходные кадры фильма. Но карты захвата соединяют поля в кадры без соблюдения структуры "3:2 pulldown", и в результате получается вот что:

A   B   C   D   D    (30fps)
A   B   B   C   D

В такой структуре кадр "C" никогда сам не возникает. После DoubleWeave каждая пара полей приобретает её собственный кадр, так что видео поток начинается так:

A A B B C C D D D    (60fps)
A B B B B C C D D
*     *   *     *

Теперь каждый кадр фильма имеет как минимум один свой кадр видео. В этом месте фильтр Pulldown с аргументами 0, 3 выберет кадры отмеченные "*" и вы получите

A     B   C     D    (24fps)
A     B   C     D

... то, что вам действительно нужно.

Очень сложно объяснить, но восстановление после "3:2 pulldown" это просто вопрос вставки шаблонного кода. Посмотрите приме для ShowFiveVersions.

Pulldown(a,b) внутренне реализован как SelectEvery(5,a,b).AssumeFrameBased.


Подгружаемые фильтры
LoadPlugin / LoadVirtualdubPlugin / LoadVFAPIPlugin
LoadPlugin("plugin-file-name"[,...])
LoadVFAPIPlugin("plugin-file-name", "new-command-name")
LoadVirtualdubPlugin("plugin-file-name", "new-command-name", prelol)

LoadPlugin передаётся аргумент, являющийся именем файл с исполняемым кодом подключаемого фильтра совместимого с AVISynth. После загрузки, становятся доступны новые команды реализуемые данным подгружаемым фильтром. Загруженные фильтры способны работать в цветовых пространствах YUY2 и RGB.

В методы LoadVFAPIPlugin и LoadVirtualdubPlugin загружают плагины TMPGEnc и VirtualDub соответственно. Загруженный фильтр будет доступен под указанным именем может работать только в цветовом пространстве RGB. Поэтому менее удобен нежели LoadPlugin.

Некоторые фильтры VirtualDub загруженные посредством LoadVirtualdubPlugin зависят от предыдущих кадров; для таких фильтров prelol должен быть не меньше числа кадров которые фильтру необходимых предварительно обработать для заполнения его буферов и обновления внутренних переменных. Удобный интерфейс в стиле AVISynth ко многим фильтрам VirtualDub можно найти в файле vdfilters.avs включённом в дистрибутив AVISynth (хотя этот файл несколько устарел). Для его использования исправьте переменную VirtualDub_plugin_directory в начале файла чтобы она содержала путь к папке содержащей плагины VirtualDub и включите этот файл в свой скрипт (посредством метода Import).

Примеры

# Загрузка фильтра выполняющего IVTC и его вызов
LoadPlugIn("q:\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
InverseTelecine(40,10,15)

# Загрузка фильтра VirtualDub "Smart Smoother", автор Donald Graft

LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smooth.vdf", "_VD_SmartSmoother", 1)
SegmentedAviSource("D:\capture.avi")
_VD_SmartSmoother(default(diameter,5), default(threshold,25), default(interlaced,false)?1:0)


R
ResampleAudio
ResampleAudio(clip,new-sample-rate)

Метод ResampleAudio проводит высококачественное изменение частоты дискретизации аудио.
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub 2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.

Reverse
Reverse(clip)

Фильтр делает клип играющий в обратном направлении. Это применимо для наблюдения идущих задом наперед людей, во время прослушивания скрытых сатанинских посланий.


Методы для загрузки или создания видео-клипов
AVISource / OpenDMLSource / AVIFileSource / WAVSource
AVISource("filename")
OpenDMLSource("filename")
AVIFileSource("filename")
WAVSource("filename")

AVISource передаётся один аргумент, являющийся именем файла в кавычках. Метод пытается считать этот файл используя либо интерфейс "Video-for-Windows" либо встроенный OpenDML код (перенесённый из VirtualDub). Фильтр способен загрузить любой файл, для которого существует AVIFile обработчик. Сюда включаются не только AVI файлы, но и WAV, AVS (скрипт AVISynth) и VDR (фрейм-сервер VirtualDub).

Метод AVISource определяет тип файла и вызывает наиболее соответствующий AVIFile или OpenDML обработчик. В случае, если открыть файл таким образом не удаётся, можно использовать OpenDMLSource или AVIFileSource, явно указывая какой тип обработчика использовать. Оба фильтра способны читать обычные (>2GB) AVI файлы. Но только через OpenDML можно работать с файлами большего размера, и только AVIFile открывает не AVI файлы (WAV, VDR, AVS).

Примеры

AVISource("d:\capture.avi") # Замечание C-программистам: обратный слеш не дублируется.
AVISource("c:/capture/00.avi") # прямой слеш также работает
AVISource("f:\soundtrack.wav") # это работает
WAVSource("f:\soundtrack.wav") # и это тоже
DirectShowSource
DirectShowSource("filename" [, FPS])

DirectShowSource читает filename используя DirectShow, та же система воспроизведения мультимедиа файлов, что используется в Windows Media Player. Метод может загрузить большинство форматов проигрываемых Windows Media Player, в том числе MPEG, MP3 и QuickTime, также как и AVI файлы не поддерживаемые AVISource (например DV type 1 или файлы использующие только DirectShow кодеки). Попытайтесь считать AVI файлы сначала посредством AVISource и если не сработает поменяйте на DirectShowSource
    Несколько предостережений:
  • Звук пока не поддерживается.
  • GRF файлы не поддерживаются (возможно поддержка появиться в следующих версиях).
  • Некоторые декодеры (замечено с MS MPEG-4) формирует видео кверх-ногами. Вам потребуется использовать FlipVertical.
  • От DirectShow видео-декодеров не требуется поддерживать точное, покадровое позиционирование и большинство не делают этого. Пока вы просто читаете видео последовательно, всё должно быть в порядке, но да помогут вам небеса, если вы пожелаете чего-то более сложного. Это ограничение не относиться к AVI файлам, или любым другим форматам которые имеют покадрово-точный DirectShow декодер.
  • От DirectShow видео-декодеров даже не сообщать вам частоту кадров входящего видео. Большинство сообщают, но ASF декодер нет. Возможно как-нибудь эта проблема решиться авто-анализом потока (как делал VirtualDub), но сейчас вы должны задавать частоту кадров, например DirectShowSource("video.asf", fps=15).
SegmentedAVISource / SegmentedDirectShowSource
SegmentedAVISource("base-filename"[,...])
SegmentedDirectShowSource("base-filename"[,...][,fps])

Метод SegmentedAVISource автоматически загрузит до 100 AVI файлов (используя AVISource) и склеит их вместе (используя UnalignedSplice). Если d:\filename.ext используется в качестве аргумента, то будут загружены файлы d:\filename.00.ext, d:\filename.01.ext и т.д. до d:\filename.99.ext. Несуществующие файлы этой последовательности буду опущены.

SegmentedDirectShowSource работает аналогично.
IPCSource
IPCSource("name")

IPCSource открывает коммуникационный канал с AVISynth-совместимым фрейм-сервером работающим в пространстве иного процесса на той же машине. IPC - сокращение от "inter-process communication" - меж-процессное взаимодействие. На текущий момент поддерживается только плагин для Premiere и FlasK. Возможно фрейм-сервер AVISynth будет сделан совместимым с VirtualDub, но на текущий момент этого нет. VDR файлы вы можете открывать командой AVISource.
Blackness / BlankClip
Blackness(clip,duration)
BlankClip(template-clip, length,width,height,pixel_type,fps,fps_denominator,audio_rate,stereo,sixteen_bit,color)

Метод BlankClip формирует одноцветный, беззвучный видео-клип указанной длительности (в кадрах). Клип переданный в качестве параметров используется в качестве шаблона для частота кадров, размер кадра т.д.), но вы можете задать все параметры клипа без указания шаблона. Цвет должен быть задан как шестнадцатеричное RGB значение. Без аргументов BlankClip формирует чёрный десяти-секундный клип, 640x480, 24 FPS, 16 bit 44100 Hz стерео.

Blackness это псевдоним BlankClip, внесённый для обратной совместимости.
ColorBars
ColorBars(width,height)

Метод ColorBars формирует видео-клип, содержащий цветные полосы SMPTE масштабированные к любому размеру изображения. Формируется клип RGB, 29.97 FPS, длительностью 1 час.
MessageClip
MessageClip("message",width,height,shrink,text_color,halo_color,bg_color)

MessageClip формирует клип содержащий текстовое сообщение. Метод используется внутренне для сообщения об ошибках. Используется фонт Arial, размер между 24 и 9 пунктов выбирается для лучшего сочетания, если возможно, ширины и высоты. Если shrink имеет значение "истина", то разрешение клипа уменьшается, если необходимо, чтобы соответствовать тексту.
Version
Version()

Метод Version создаёт видео-клип 476x104, 24 FPS, 10 секунд, формат RGB с краткой информацией по AVISynth зелёным 24-пункта Arial шрифтом.


Фильтры изменяющие размер кадра
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub 2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.

BilinearResize
BilinearResize(clip,target-width,target-height)
BilinearResize(clip,source-left,source-top,source-width,source-height,target-width,target-height)

Фильтр BilinearResize масштабирует кадры входного видео к произвольному новому размеру. Передача необязательных параметров даст в результате тот же результат, как если бы к видео-клипу был применён Crop с этими аргументами до BilinearResize (только быстрее).

BilinearResize использует стандартную билинейную фильтрации. И практически идентичен фильтру VirtualDub "resize [precise bilinear]". Отличие в том, что фильтр VirtualDub похоже берёт не совсем верный масштабный коэффициент. В результате пиксели на верхней и правой границе обрезаются либо дублируются. Ошибка становиться заметна при увеличении вдвое или больше, но в других случаях несущественна.

Примеры

# Загрузить видео-файл и отмасштабировать к 240x180 (с исходного размера)
AVISource("video.avi").BilinearResize(240,180)

# Загрузить 720x480 (CCIR601) видео и отмасштабировать к 252x240 (VCD), сохраняя соотношение сторон
AVISource("dv.avi").BilinearResize(8,0,704,480,352,240)

# Извлечь верхний правый квадрант видео-клипа 320x240 и увеличить его до размеров всего кадра
BilinearResize(160,0,160,120,320,240)
BicubicResize
BicubicResize(clip,target-width,target-height[,b,c])
BicubicResize(clip,target-width,target-height,b,c,source-left,source-top,source-width,source-height)

BicubicResize аналогичен BilinearResize, не считая замены линейной фильтрации на Митчелла-Нетравали двухпараметрическую кубическую. Параметры b и c могут быть использованы для настройки свойств кривой. С b=0 и c=0.75 фильтр работает идентично фильтру VirtualDub "resize [precise bicubic]" и результат одинаков, с учётом проблемы масштабного коэффициента описанной в BilinearResize. Значения по умолчанию: b=1/3 и c=1.3 рекомендованы Митчеллом и Нетравали как дающие наиболее визуально приятные результаты для человека в субъективных тестах. Большие значения b и c дают интересные эффекты, например попробуйте b=0 и c=-5.

При увеличении размера кадра, BicubicResize даёт результаты выглядящие значительно лучше нежели BilinearResize. Однако при уменьшении результаты сблизятся или у BilinearResize будет даже лучше. Несмотря на то, что бикубический фильтр VirtualDub даёт изображение, которое выглядит лучше чем билинейный, это в основном за счёт подчёркивания границ бикубическим фильтром, а не результат лучшей выборки. Чёткое изображение хорошо, пока вы не попытаетесь его сжать. В этот момент они очень быстро начнут раздражать вас. BicubicResize по умолчанию не подчёркивает границ так сильно, как бикубический в VirtualDub, но все же подчёркивает сильнее чем билинейный. Если вы планируете кодировать видео с низким битрейтом, не удивляйтесь, если BilinearResize даст лучшее качество
Crop / CropBottom
Crop(clip,left,top,width,height)
CropBottom(clip,count)

Crop обрезает лишние пиксели с границ каждого кадра. Если источник имеет размер 720x480, а вы хотите уменьшить его до 352x240 для VideoCD, то следует использовать код
# Преобразовать CCIR601 в VCD, с сохранением верного соотношения сторон
ReduceBy2
Crop(4,0,352,240)

Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и width должны быть чётными.

Альтернативный фильтр CropBottom полезен для обрезания мусор снизу видео-клипа захваченного с VHS кассеты. Он убирает count линий снизу каждого кадра
AddBorders
AddBorders(clip,left,top,right,bottom)

AddBorders добавляет чёрные границы по краям изображения, которые имеют указанную ширину (в пикселях). Пространство цвета YUY2 хранит цветовую информацию для двух пикселей по горизонтали, таким образом, работая в режиме YUY2, left и right должны быть чётными.

Помните, что многие алгоритмы сжатия с потерями плохо работают с одноцветными границами, если их размер не кратен размеру блока (16 пикселов для MPEG)

Вы можете использовать этот фильтр в комбинации с Crop для смещения изображения без изменения размера кадра. К примеру:
# Сместить 352x240 изображение на 2 пикселя вправо
Crop(0,0,350,240).AddBorders(2,0,0,0)


S
SegmentedAVISource / SegmentedDirectShowSource
SegmentedAVISource("base-filename"[,...])
SegmentedDirectShowSource("base-filename"[,...][,fps])

Метод SegmentedAVISource автоматически загрузит до 100 AVI файлов (используя AVISource) и склеит их вместе (используя UnalignedSplice). Если d:\filename.ext используется в качестве аргумента, то будут загружены файлы d:\filename.00.ext, d:\filename.01.ext и т.д. до d:\filename.99.ext. Несуществующие файлы этой последовательности буду опущены.

SegmentedDirectShowSource работает аналогично.
SelectEven / SelectOdd
SelectEven(clip)
SelectOdd(clip)

SelectEven делает выходной видео-поток используя только кадры входного видео-потока с чётными номерами. SelectOdd - его нечётное дополнение.

Так как кадры нумеруются с нуля, SelectEven фактически выбирает первый, третий, пятый, ... кадры по человеческому соглашению счёта.
SelectEvery
SelectEvery(clip,step-size[,offset1[,offset2[,...]]])

SelectEvery это обобщение таких фильтров, как SelectEven и Pulldown. Проще всего описать фильтр на примере:
SelectEvery(clip,2,0) # идентично SelectEven(clip)
SelectEvery(clip,2,1) # идентично SelectOdd(clip)
SelectEvery(clip,10,3,6,7) # выбрать кадры 3,6,7,13,16,17,23,26,27... из клипа источника
SelectEvery(clip,9) # выбрать кадры 0,9,18,27,... (второй аргумент предполагается равным 0)

Или вот так
# Взять прогрессивный клип 24FPS и применить "3:2 pulldown"
# получая на выходе чересстрочный клип 30FPS
AssumeFrameBased
SeparateFields
SelectEvery(8, 0,1, 2,3,2, 5,4, 7,6,7)
Weave
SeparateFields
SeparateFields(clip)

NTSC и PAL видеосигналы это последовательности полей, но все известные карты захвата видео захватывают два поля сразу и "interlace" - чередуют (или "weave" - сплетают) их в кадры. Так кадр 0 в захваченном файле содержит поля 0 и 1; кадр 1 содержит поля 2 и 3; и т.д. SeparateFields берёт основанный на кадрах клип и разделяет каждый кадр на составляющие его поля, формируя новый клип с удвоенной частотой и числом кадров. Это полезно, если вы хотите использовать Trim и тому подобные фильтры с точностью до одного поля.

SeparateFields использует информацию о порядке полей клипа источника для решения которое из каждой пары полей выводится первым. Если порядок неверен, используйте ComplementParity перед SeparateFields. Если результат все равно неверен, возможно стоит использовать также и AssumeFrameBased

Фильтр ничего не делает, если клип уже основан на полях.
Blur / Sharpen
Blur(clip,amount)
Sharpen(clip,amount)

Фильтр использует простую 3x3 размывающую или обостряющую матрицу весов пикселов. Наибольший допустимый аргумент для Blur около 1.58, который соответствует равномерному размытию 3x3 пикселя. Значение 1.0 даёт вам веса пикселов (1/4, 1/2, 1/4). Если вам требуется Гауссовское размытие большего радиуса, примените несколько копий Blur(1.0) последовательно.

Отрицательные значения для Blur на самом деле повышают резкость изображения, и фактически Sharpen просто псевдоним для Blur(- n). Наименьшее допустимое значение для Blur - -1.0, и наибольшее для Sharpen - 1.0
ShowFiveVersions
ShowFiveVersions(clip1,clip2,clip3,clip4,clip5)

ShowFiveVersions берёт пять видео-потоков и соединяет их в зигзагообразном порядке слева на право. Единственное применение для этого - помочь найти структуру NTSC "3:2 pulldown". Этого можно добиться используя такой код:
# Наблюдать все пять структур 3:2 pulldown сразу

DoubleWeave()
# Встаете фильтр изменения размера если надо (см. ниже)
a = Pulldown(0,2).Subtitle("0,2")
b = Pulldown(1,3).Subtitle("1,3")
c = Pulldown(2,4).Subtitle("2,4")
d = Pulldown(0,3).Subtitle("0,3")
e = Pulldown(1,4).Subtitle("1,4")
ShowFiveVersions(a,b,c,d,e)

Этот код показывает пять структур "3:2 pulldown" с добавленным текстом идентифицирующим каждую из них. Затем просматривая конечный фильм можно выбрать структуру не содержащую смешанных кадров. (При обычном "3:2 pulldown" должно быть две одинаково хороших. Посмотрите на диаграмму в описании для фильтра Pulldown и поймёте почему.) Если ни одна из пяти не подходит, то вы имеете дело с одной из более извращённых форм "3:2 pulldown" и вам может понадобиться использовать PeculiarBlend.

Кстати, если вы планируете захватывать в высоком разрешении и затем масштабировать к нужному размеру, как рекомендовалось, вы возможно должны поместить ReduceBy2 или BilinearResize или что-нибудь сразу после команды DoubleWeave в вышерасположенном коде, до DoubleWeave это сработает неверно, а если отложите на будущее, ShowFiveVersions сформирует по-настоящему большой кадр.
ShowFrameNumber
ShowFrameNumber(clip)

ShowFrameNumber отрисовывает текст на каждом кадре показывающий каким AVISynth считает его номер. Фильтр иногда полезен при написании скриптов. Если вы примените дополнительные фильтры после ShowFrameNumber, будут рассматривать текст в кадре просто как часть картинки, так что номер может быть искажён к тому времени, как вы его увидите.
ShowSMPTE
ShowSMPTE(clip,fps)

Фильтр ShowSMPTE аналогичен ShowFrameNumber, но показывает код времени SMPTE (часы:минуты:ссекунды:кадр). Аргумент fps необходим и должен быть 24, 25, 30 или 29.97.
SpatialSoften / TemporalSoften
SpatialSoften(clip,radius,luma_threshold,chroma_threshold)
TemporalSoften(clip,radius,luma_threshold,chroma_threshold)

Фильтры SpatialSoften и TemporalSoften удаляют шум из видео-клипа выборочно смешивая пиксели. Это фильтры могут творить чудеса, и весьма рекомендуется попытаться использовать их. Но они также могут стереть мелкие детали если пороги слишком высоки, поэтому не перестарайтесь. И они очень медленны, особенно с большими значениями радиуса, поэтому не включайте их до тех пор, пока всё остальное не будет готово.

SpatialSoften заменяет каждый пиксель в кадре средним всех соседних выборок отличающихся от центральной выборки не более чем на указанное пороговое значение. "Соседний" значит пиксель не далее чем на +/- radius в направлениях X и Y. Пороги используются как luma_threshold для Y (яркостной составляющей) выборок, и chroma_threshold для U и V (цветовой составляющей) выборок.

TemporalSoften аналогичен, исключая то, что он просматривает один и тот же пиксель в соседних кадрах. Используются все кадры не далее чем на +/- radius отстоящие от центрального. Этот фильтр не выглядит столь же эффективным, как SpatialSoften.

Рекомендуется "поиграть" с параметрами для этих фильтров, чтобы получить представление о том, что они делают - к примеру попробуйте установить одному из трёх параметров очень высокое значение, оставляя другие с низким, и смотрите что выйдет. Помните, что установка любого из параметров в 0.0 станет причиной очень медленного ничего-ни-делания.

В AVISynth, SpatialSoften и TemporalSoften работают только в пространстве цвета YUY2. Можно использовать ConvertToYUY2 фильтр если исходный видео-клип не в YUY2 формате.
StackHorizontal / StackVertical
StackHorizontal(clip1,clip2[,...])
StackVertical(clip1,clip2[,...])

StackHorizontal берёт два видео-клипа и показывает их вместе слева-на-право. Высоты изображений и их цветовые форматы должны совпадать. Остальная информация (звуковая дорожка, частота кадров и т.д.) в основном берётся из первого клипа. StackVertical делает тоже самое, но сверху-вниз. Например:

Примеры

# Сравнение кадров с и без подавления шума
StackVertical(last, last.SpatialSoften(2,3,6))

# Располагает клипы переменных a, b, c, d квадратом:
# a b
# c d
StackVertical(StackHorizontal(a,b),StackHorizontal(c,d))
Subtitle
Subtitle(clip,"text",x,y,first-frame,last-frame,"font-name",point-size[,text-color[,halo-color]])
Subtitle(clip,"text")

Фильтр Subtitle добавляет строку сглаженного текста в последовательность кадров. Если вы желаете более одно субтитра, или субтитр содержащий более одной строки, вы должны сцепить вместе несколько фильтров Subtitle. Этот фильтр очевидно неприменим для чего-то большего, чем случайное использование.

Цвет текста и ореола должны быть заданы как шестнадцатеричное RGB значение, как в HTML, не считая того, что начинается оно с $ вместо #. (# Используется для комментирования).

Альтернативная, краткая форма полезна когда вас не беспокоит, как выглядят субтитры до тех пор, пока вы их видите. К примеру, когда вы используете фильтр StackVertical, который покажет несколько вариантов кадра сразу, и желаете пометить их, чтобы помнить что есть что.

AVISynth использует фильтр внутри для метода Version и для вывода сообщений об ошибках. Ещё механизм субтитров используется в ShowFrameNumber.
Subtract
Subtract(clip1,clip2)

Subtract формирует выходной клип в котором каждый пиксель устанавливается в соответствии с разницей между соответствующими пикселями в clip1 и clip2. Более точно, он устанавливается (50% gray) + (clip1 pixel) - (clip2 pixel). Вы можете использовать Levels после, если желаете повысить контраст. К примеру:
# Сделать разницу между clip1 и clip2 явно очевидной Subtract(clip1,clip2).Levels(127,1,129,0,255)

Если хотите в деталях увидеть разнице между смежными кадрами, можете использовать код:
Subtract(clip.Trim(1,0),clip)
SwapFields
SwapFields(clip)

Фильтр SwapFields меняет местами строку 0 со строкой 1, строку 2 со строкой 3 и т.д., что эффективно меняет местами два поля в чересстрочном кадре. Тоже самое делает SeparateFields.ComplementParity.Weave (и именно так фильтр реализован).


T
SpatialSoften / TemporalSoften
SpatialSoften(clip,radius,luma_threshold,chroma_threshold)
TemporalSoften(clip,radius,luma_threshold,chroma_threshold)

Фильтры SpatialSoften и TemporalSoften удаляют шум из видео-клипа выборочно смешивая пиксели. Это фильтры могут творить чудеса, и весьма рекомендуется попытаться использовать их. Но они также могут стереть мелкие детали если пороги слишком высоки, поэтому не перестарайтесь. И они очень медленны, особенно с большими значениями радиуса, поэтому не включайте их до тех пор, пока всё остальное не будет готово.

SpatialSoften заменяет каждый пиксель в кадре средним всех соседних выборок отличающихся от центральной выборки не более чем на указанное пороговое значение. "Соседний" значит пиксель не далее чем на +/- radius в направлениях X и Y. Пороги используются как luma_threshold для Y (яркостной составляющей) выборок, и chroma_threshold для U и V (цветовой составляющей) выборок.

TemporalSoften аналогичен, исключая то, что он просматривает один и тот же пиксель в соседних кадрах. Используются все кадры не далее чем на +/- radius отстоящие от центрального. Этот фильтр не выглядит столь же эффективным, как SpatialSoften.

Рекомендуется "поиграть" с параметрами для этих фильтров, чтобы получить представление о том, что они делают - к примеру попробуйте установить одному из трёх параметров очень высокое значение, оставляя другие с низким, и смотрите что выйдет. Помните, что установка любого из параметров в 0.0 станет причиной очень медленного ничего-ни-делания.

В AVISynth, SpatialSoften и TemporalSoften работают только в пространстве цвета YUY2. Можно использовать ConvertToYUY2 фильтр если исходный видео-клип не в YUY2 формате.
Trim
Trim(clip,first-frame,last-frame)

Trim вырезает часть видео-клипа включающую только кадры с first-frame до last-frame. Звук также вырезается и остаётся синхронизированным. Передача 0 для last-frame означает "конец клипа". К примеру:
Trim(100,0) # удалить первые 100 кадров


U
AlignedSplice / UnalignedSplice
AlignedSplice(clip1,clip2[,...])
UnalignedSplice(clip1,clip2[,...])

AlignedSplice и UnalignedSplice соединяют два или более видео-клипов непрерывно. Различие между фильтрами лежит в том, как они обращаются со звуковыми дорожками. UnalignedSplice просто соединяет их без внимания к синхронизации с видео. AlignedSplice обрезает первую звуковую дорожку или вставляет тишину, смотря что требуется для гарантии сохранения синхронизации с видео второй звуковой дорожки.

Вы должны использовать UnalignedSplice когда объединяемые фонограммы были исходно непрерывны - к примеру, когда вы объединяете файлы захваченные в AVI_IO. Небольшие ошибки отсчётов времени могут вести к щелчкам в звуке если вы примните AlignedSplice в такой ситуации.

Скриптовый язык AVISynth предоставляет + и ++ как синонимы для UnalignedSplice и AlignedSplice соответственно
Пример 1:
# Объединить сегментированный файл захвата для формирования цельного клипа
UnalignedSplice(AVISource("capture1.avi"), AVISource("capture2.avi"), AVISource("capture3.avi"))
# или: AVISource("capture1.avi") + AVISource("capture2.avi") + AVISource("capture3.avi")
Пример 2:
# Извлечь три сцены из клипа и объединить их вместе в новом порядке
AVISource("video.avi")
edited_video = Trim(2000,2500) ++ Trim(3000,3500) ++ Trim(1000,1500)


V
Version
Version()

Метод Version создаёт видео-клип 476x104, 24 FPS, 10 секунд, формат RGB с краткой информацией по AVISynth зелёным 24-пункта Arial шрифтом.
HorizontalReduceBy2 / VerticalReduceBy2 / ReduceBy2
HorizontalReduceBy2(clip)
VerticalReduceBy2(clip)
ReduceBy2(clip)

Фильтр HorizontalReduceBy2 уменьшает горизонтальный размер кадра наполовину и VerticalReduceBy2 уменьшает вертикальный размер кадра наполовину. Применённые последовательно они уменьшат наполовину весь кадр (на четверть по площади). Псевдонимом такой последовательности является ReduceBy2

Фильтр использует значения пикселов с весами (1/4, 1/2, 1/4) те же, что и в фильтре VirtualDub 2:1 reduction (high quality), что позволяет избежать эффекта "лестницы" возникающего при весах (1/2, 1/2). VirtualDub "resize" использует третий набор весов для уменьшения 2:1, но эксперименты показали, что они дают выглядящие несколько хуже MPEG файлы - по-видимому причина в немного подчёркнутых границах, а большинство кодеков не любят четких границ.

Если источник - чересстрочный, VerticalReduceBy2 выполнит deinterlace как побочный эффект. Если вы планируете размер результирующего видео порядка 320x240, рекомендуется захватывать видео с полным чересстрочным размером (320x480) и использовать VerticalReduceBy2. Это даст выглядящий лучше результат. Кодек HuffYUV сжимает видео порядка 2:1 без потерь, и если позволяет система можно захватывать 640x480 и выполнять ReduceBy2. Однако при использовании MJPEG кодека преимущество в качестве будет невелико и может оказаться лучше использовать Huffyuv с размером кадра 320x480.


W
Weave
Weave(clip)

Фильтр Weave противоположен SeparateFields. Он берёт пары полей исходного видео-клипа и соединяет их вместе для создания чересстрочных кадров. Новый клип имеет уменьшенные на половину частоту кадров и их число. Weave использует информацию о соответствии кадров клипа источника решая какое поле расположить наверху. Если порядок неверен используйте ComplementParity до или SwapFields после.

Все фильтры AVISynth сохраняют информацию о последовательности полей, ты что Weave всегда объединит поля вместе в правильном порядке. Если вы хотите изменить его, используйте ComplementParity до или SwapFields после.

Фильтр ничего не делает, если клип уже основан на кадрах.
AVISource / OpenDMLSource / AVIFileSource / WAVSource
AVISource("filename")
OpenDMLSource("filename")
AVIFileSource("filename")
WAVSource("filename")

AVISource передаётся один аргумент, являющийся именем файла в кавычках. Метод пытается считать этот файл используя либо интерфейс "Video-for-Windows" либо встроенный OpenDML код (перенесённый из VirtualDub). Фильтр способен загрузить любой файл, для которого существует AVIFile обработчик. Сюда включаются не только AVI файлы, но и WAV, AVS (скрипт AVISynth) и VDR (фрейм-сервер VirtualDub).

Метод AVISource определяет тип файла и вызывает наиболее соответствующий AVIFile или OpenDML обработчик. В случае, если открыть файл таким образом не удаётся, можно использовать OpenDMLSource или AVIFileSource, явно указывая какой тип обработчика использовать. Оба фильтра способны читать обычные (>2GB) AVI файлы. Но только через OpenDML можно работать с файлами большего размера, и только AVIFile открывает не AVI файлы (WAV, VDR, AVS).

Примеры

AVISource("d:\capture.avi") # Замечание C-программистам: обратный слеш не дублируется.
AVISource("c:/capture/00.avi") # прямой слеш также работает
AVISource("f:\soundtrack.wav") # это работает
WAVSource("f:\soundtrack.wav") # и это тоже


Общая информация

Все выражения AVISynth имеют вид:
variable_name = expression
expression
return expression
end

В первом случае, expression вычисляется и результат (который всегда видео-клип) присваивается variable_name. Во втором случае expression вычисляется и результат присваивается специальной переменной last. В третьем случае, expression вычисляется и используется как "return value" - возвращаемое значение скрипта, т.е. видео-клип, который увидит приложение открывшее этот AVS файл. Четвёртый вариант эквивалентен return last.

variable_name может быть до 50 символов длинной и содержать буквы, цифры, знак подчёркивания (_) и никаких иных. Имя не может начинаться с цифры.

expression может принимать следующие формы.
variable_name
Function(args)
expression.Function(args)
expression1 + expression2
expression1 ++ expression2

В первом случае, значение expression есть значение ранее установленной переменной variable_name. Во втором случае, значение есть возвращаемое значение некой функции (которая может быть неким методом формирующим видео-клип). Третий случай - альтернативная запись (Объектно Ориентированный стиль), эквивалентная Function(args, expression). Четвёртый и пятый варианты эквивалентны UnalignedSplice(expression1, expression2) и AlignedSplice(expression1, expression2) соответственно

Функции в скриптовом языке AVISynth это видео-фильтры либо методы модифицирующие (и формирующие) видео-клипы. Синтаксис вызовов показан в описаниях фильтров и методов. Функциям может передаваться до 60 аргументов (этого должно хватить), и возвращаемое значение всегда видео-клип. Функции всегда возвращают новый видео-клип, никогда не модифицирую существующий.

args - список аргументов функции разделённых запятыми. Список может быть пустым. Любой аргумент должен быть строкой текста, целым или с плавающей точкой числом или видео-клипом (это expression). Если функция ожидает видео-клип, как последний аргумент, и этот аргумент не указан, тогда в качестве опущенного аргумента используется специальная переменная last

Фильтры AVISynth могут принимать именованные аргументы. Именованные аргументы могут быть записаны в любом порядке и фильтр выберет значения по умолчанию для тех, что вы пропустите. В результате некоторые фильтры делаются значительно более лёгкими в применении. К примеру, вы можете теперь писать Subtitle("Hello, World!", text_color=$00FF00, x=100, y=200) вместо Subtitle("Hello, World!", 100, 200, 0, 999999, "Arial", 24, $00FF00).

Вызовы функций можно записывать без скобок, например FilterName arg1, arg2. Основной резон для этого - сохранение совместимости со старыми скриптами. Однако, иногда удобно не использовать скобки, когда нет возможности возникновения путаницы

Строка текста окружается либо "символами цитирования" либо ``в стиле TeX''. Строка текста может содержать любые символы кроме завершения, символа цитирования или двойных апострофов. Если вам надо использовать символ цитирования в строке, применяйте запись в стиле TeX. Как альтернативу, для преодоления данного ограничения можно использовать фигурные символы цитирования из Windows расширения ASCII таблицы

Целое число - строка цифр, с необязательным + или - в начале. Число с плавающей точкой - строка цифр с точкой где-то внутри и необязательным + или -. К примеру +1. воспринимается как число с плавающей точкой.

Также можно использовать шестнадцатеричные числа с префиксом $. Такие числа рассматриваются как целые. К примеру $FF8800 - оттенок оранжевого. Это тоже самое, что и запись используемая в HTML, за исключением того, что в HTML используется префикс #, а не $.

Любое выражение AVISynth должно занимать одну строку. Размещение более одного выражения в строке или разделение одного выражения на несколько строк не поддерживается.

AVISynth игнорирует любой текст следующий после символа # и до конца строки. Этот символ может быть использован для добавления в скрипт комментариев.

AVISynth игнорирует регистр: aViSouRCe применим также, как и AVISource.

Вы можете получить свойства клипа в AVS скрипте. К примеру, если переменная clip содержит видео-клип, то clip.height его высота, clip.framecount длина в кадрах и т.д. Вы можете работать с этими значениями используя все обычные арифметические и логические операторы (из C), и выполнять условный код с оператором ?: (к примеру clip = clip.IsRGB?clip.Subtitle("RGB"):clip.Subtitle("Not RGB")). Полный список свойств таков: width, height, framecount, framerate, audiorate, audiolength, audiochannels, audiobits, IsRGB, IsYUY2, IsFieldBased, IsFrameBased.

Вспомогательные системные функции: floor(f), ceil(f), round(f) (преобразование числа с плавающей точкой в целое); IsBool(var), IsInt(var), IsFloat(var), IsString(var), IsClip(var), Defined(var) (предикаты); Default(x,d) (возвращает x если Defined(x), в противном случае d); Eval(string) и Apply(func-string,arg,...), (Eval("f(x)") эквивалентно f(x) и Apply("f", x)); Import(filename) (вычисляет содержимое файла); Assert(bool-expr,error-message) для вывода сообщения об ошибке.

Вы можете определить и вызывать свои собственные функции в AVS скрипте, например так:

function NTSC2PAL(clip c) {
# Довольно хорошее преобразование NTSC->PAL. Была бы лучше с Smart Bob. :-)
    Assert(c.height == 480, "NTSC2PAL: input clip must have 480 scan lines")
    Bob(c, height=576)
    ChangeFPS(50)
    SeparateFields().SelectEvery(4,0,3)
    return Weave()
}
AVISource("ntsc.avi").NTSC2PAL()


Введение.
Что такое AVISynth?

AVISynth это скриптовый язык и набор фильтров для решения простых задач нелинейного редактирования. AVISynth необычен тем, что он не создаёт выходных файлов. Вместо этого, скрипты AVISynth, имеющие расширение AVS, могут быть напрямую открыты в приложениях читающих AVI файлы. Когда открывается скрипт AVS, AVISynth запускается в фоновом режиме, формирует видео и аудио данные согласно скрипту и "скармливает" их приложению по мере надобности.

Вместе с плагином видео-сервера, AVISynth позволяет использовать Premiere или FlasK в качестве фрейм-сервера. Это очень полезно, если вы желаете закодировать ваше отредактированное в Premiere или FlasK видео во внешнем кодировщике (например TMPGEnc, Cinemacraft или VirtualDub). Это достигается путём создания " ложного" AVI файла. Этот созданный "ложный" AVI файл загружается в кодировщик и кодируется как нормальный AVI. Это решает проблему создания требующего много времени промежуточных AVI требующих много места. При запуске плагин видео-сервер для Premiere и FlasK создаёт "ложный" AVI файл c:\part0.avs (с использованием разделения ещё и part1.avs). Если вы загрузите AVS в кодировщик AVISynth выполняет соединение с видео- сервером, затем запросы кодировщика на чтение передаются в плагин Premiere/FlasK. Далее плагин обрабатывает запрос и пересылает аудио/видео в кодировщик. Такая структура называется меж-процессной связью и реализуется через команду AVISynth IPCSource.

Скриптом в одну строчку вы можете добавить поддержку сегментированных файлов захвата, AVI файлов размера >2GB, QuickTime файлов MOV, MPEG файлов в приложения которые сами по себе такой поддержки не имеют. Используя Trim, Splice и Dissolve вы можете выбрать и перераспределить сцены необработанного отснятого видео. Применяя ReduceBy2, BilinearResize и BicubicResize вы можете отмасштабировать кадры видео(с качеством сравнимым с Photoshop и лучшим чем в Premiere). Благодаря командам SeparateFields и Weave вы можете редактировать чересстрочное видео с точностью до кадра. Пользуясь Pulldown вы можете избавиться от "3:2 pulldown". Накладывая фильтры SpatialSoften и TemporalSoften вы можете подавить шум в вашем видео добиваясь значительно лучшего качества в выходных форматах типа MPEG.
AVISynth и VirtualDub?

Способность VirtualDub выступать в роли "фрейм-сервера" имеет такую же функциональность, как и AVISynth. Рассмотрим преимущества и недостатки обоих этих программ.

Преимущества AVISynth над VirtualDub:
  • Архитектура фильтрации в VirtualDub ограничена линейным редактированием. В AVISynth архитектура фильтрации и скриптовый язык могут выполнять произвольные операции нелинейного редактирования. Задачи, требующие специального кода в VirtualDub, такие как "вырезка", восстановление оригинальных кадров фильма из полей (inverse telecine) и объединение множества входных файлов поддерживаются естественным образом стандартными фильтрами AVISynth, и многие задачи которые невозможно решить в VirtualDub легко решаются AVISynth.
  • AVISynth может читать большинство файлов, которые Windows Media Player может воспроизводить, включая MOV/QT, MPEG, MP3, DV type 1 и т.д..
  • Так как AVISynth выполняется внутри адресного пространства вызывающей программы, требуются меньшие накладные расходы по сравнению с VirtualDub в режиме фрейм-сервера. Это значит, что при прочих равных условиях AVISynth лидирует в общем времени выполнения.
  • Фильтры AVISynth обрабатывают изображение в цветовом пространстве YUY2 также хорошо, как и в RGB.
  • Скрипты AVISynth - вещь в себе и всегда доступны для открытия; вам нет нужды запускать фрейм-сервер. Старые скрипты можно использовать снова.

Преимущества VirtualDub над AVISynth:
  • VirtualDub имеет приятный графический интерфейс. AVISynth не имеет графического интерфейса вообще - вы должны писать файлы скриптов.
  • VirtualDub имеет больший выбор фильтров.
  • VirtualDub лучше оптимизирован, чем AVISynth. Некоторые фильтры VirtualDub (например Resize) выполняются заметно быстрее своих AVISynth эквивалентов.
  • VirtualDub способен выполнять прямое копирование источника (direct stream copy), в котором AVI файлы могут объединяться и усекаться без цикла разжатия/сжатия. AVISynth всегда разжимает видео (впрочем, как и фрейм-сервер VirtualDub).
  • У VirtualDub есть много других полезных возможностей, не относящихся к фрейм-серверу, таких как встроенный захват видео.

На самом деле между VirtualDub и AVISynth нет противоборства. AVISynth фактически содержит порядочный объём кода VirtualDub. Благодаря публикации исходного кода VirtualDub его автором, Авери Ли (Avery Lee) Многие программисты использовали их. Обе программы VirtualDub и AVISynth бесплатны, и их можно использовать вместе.

Установка AVISynth

Установка AVISynth проста. Во-первых удостоверьтесь, что в системе не присутствует старая версия AVISynth. (проверить можно поискав avisynth.dll на жёстком диске). Во-вторых, необходимо скачать AVISynth из всемирной сети (если вы уже не скачали). Внутри архива найдите avisynth.dll. Скопируйте этот файл в директорию Windows 9x \System (или \System32 для WinNT/W2k). После этого запускайте файл install.reg также находящийся в архиве. Всплывшее окошко должно сообщить об успешном импорте в реестр. Теперь AVISynth зарегистрирован и в рабочем состоянии. После установки, кодировщики должны быть способны читать AVS файлы.

AVISynth протестирован в системах Windows 98, Windows NT и Windows 200. Так что проблем быть не должно.
Информация об авторах AVISynth

Разработку AVISynth начал Бэн Рудиак-Гоулд (Ben Rudiak-Gould) Это была весьма приятная утилита, но она содержала несколько ошибок. В связи с этим Эдвин ван Эгглен (Edwin van Eggelen) внёс изменения, разрешающие некоторые из них. Далее была выпущена новая версия программы, но без модуля IPCSource. Этот модуль также внёс Эдвин ван Эгглин. К сожалению затем Бен Рудиак-Гоулд пропал (Октябрь 2000). Так что в настоящее время основную работу по поддержке текущей версии AVISynth и её развитию выполняет Эдвин ван Эгглен.


Ссылки.
http://www.doom9.org/
Кроме того, что здесь можно найти не только упомянутые но и многие другие полезные программы, на этом сайте имеется множество инструкций и обзоров по различным темам связанных с извлечением видео-файлов с DVD, кодированием в MPEG и DivX и т.п..
http://www.math.berkeley.edu/~benrg/index.html
Домашняя страница создателя AVISynth. Здесь можно найти оригинальный текст описания скриптового языка. Также здесь находится описание другой полезной программы - кодека сжатия видео без потерь HuffYUV.
http://www.videotools.net/
Сайт разработчика продолжающего развитие AVISynth. Кроме того он же разработал подключаемый модуль для Premiere и FlasK выполняющий функции видео-сервера и программу AVIWrapper позволяющую открывать скрипты AVISynth в программах работающих с AVI нестандартно (Microsoft Media Encoder и Cinemacraft SP v2.62).
http://www.digital-digest.com/nickyguides/synth-vdub.htm
Ещё одно учебное пособие по AVISynth. Предлагаемая там информация не несёт ничего принципиально нового, по сравнению описанием разработчика. Кроме того с появлением плагина MPEG2DEC оно несколько устарело.
http://www.rmvos.nl/
На этом сайте присутствует несколько Могущих быть полезными обзоров. Что более интересно, все вопросы к разработчику связанные с AVISynth лучше задавать в имеющейся здесь форме. Так вероятность получения ответа будет выше.
http://hiroko.ee.ntu.edu.tw/
Сайт разработчика DVD2AVI. Программы совместно с плагином MPEG2DEC позволяющей открывать в AVISynth MPEG файлы с DVD.
http://me.in-berlin.de/~faphida/m2/m2index.html
Авторская страница по плагину MPEG2DEC и SpatialSoftenMMX.
http://www.virtualdub.org/
Домашняя страница автора VirtualDub. Кроме самой программы можно найти набор фильтров к ней, расположенных как внутри, так и вне сайта.
http://www.nandub.org/
Сайт посвящённый надстройке VirtualDub - NanDub реализующей так называемый Smart Birtrate Control. NanDub выполняет двухпроходное кодирование и вычисляет битрейт каждого кодируемого кадра исходя из значений полученных при первом проходе и настроек кодирования. Описание на английском можно найти на http://www.doom9.org/. На русском существует описание по адресу http://www.3dnews.ru/reviews/multimedia/dvd-rip2/


Подгружаемые фильтры.
Фильтры VirtualDub.

Команда LoadVirtualdubPlugin позволяет использовать в скрипте подгружаемые однопроходные фильтры VirtualDub. Чтобы стандартизировать запись наиболее употребимых фильтров можно использовать файл vdfilters.avs (Загрузить / Посмотреть). Аналогичным образом можно подготовить обращение к другим фильтрам.
Плагин InverseTelecine.

Это небольшой фильтр первоначально разработанный для тестирования команды LoadPlugin в AVISynth. Но применение части его - фильтра InverseTelecine давало великолепные результаты и автор опубликовал его в сети. Другая часть - фильтр DeInterlacing все еще в состоянии разработки, но можно надеяться, что и он будет когда-нибудь закончен.

Плагин был разработан для работы с AVISynth v1.0 или выше. Неизвестно, как он будет работать с любыми другими программами (Можно быть уверенным, что не будет) и такие эксперименты проводить не рекомендуются.

Для нормальной работы, плагин требует, чтобы видео-поток был в формате YUY2 (больше об этом ниже). Фактически, что либо другое может быть серьёзно испоганено.
InverseTelecine

Фильтр выполняет восстановление видео-потока прошедшего процедуру "Telecine" ("3:2 pulldown"). Плагин не может восстановить видео-поток который только чересстрочен или не прошёл через явный процесс Telecine.

Фильтр InverseTelecine использует три параметра: Верхний предел, Нижний предел и Порог (более об это ниже). Значения в области от 0 до 255 для верхнего и нижнего пределов и от 1 до 1000000 для порога. (Хорошие результаты дают значения 40,10,15).
Верхний предел
если разница значений яркости двух пикселов (один над другим) выше этого значения, то пиксель считается "чересстрочным".
Нижний предел
если разница значений яркости двух пикселов (один над другим) ниже этого значения, то пиксель считается "не чересстрочным".
Порог
если значение "чересстрочности" его превышает то необходим перерасчёт структуры "3:2 pulldown"

Пример

LoadPlugIn("c:\archive\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
InverseTelecine(40,10,15)
DeInterlace

DeInterlace берёт чересстрочный видео-поток и восстанавливает прогрессивный согласовывая пары полей (без смешивания).

Прямо сейчас никаких параметров не требуется, но возможно это измениться ...

Для нормальной работы DeInterlace нужно уметь находить правильное соответствие полей в текущем и смежных кадрах. Это значит, что если видео-потоки сшиты вместе или ваша карта захвата работает не очень хорошо, вы можете увидеть несколько прошедших фильтр чересстрочных кадров.

Пример

LoadPlugIn("c:\archive\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
DeInterlace
Decimate

Decimate убирает одно дублированное поле в каждой группе определённых кадров. Эффект того же типа что и InverseTelecine, но на прогрессивных (не чересстрочных) видео-потоках.

Фильтру передаётся 3 параметра: Группа, Фильтр и Порог.
Группа
Указывает число кадров в группе из которых один кадр должен быть удалён. К примеру, Группа = 5 означает удаление 1 кадра в каждой группе из 5 кадров (что аналогично IVTC).
Фильтр
Указывает, как близко должны быть значения яркостей двух пикселей, чтобы быть рассматриваемыми как одинаковые. Для DVD рекомендуемые значения между 4 и 8 (лучше 8) и 16 или меньше для VHS.
Порог
Показывает, как похожи должны быть 2 кадра, чтобы рассматриваться как одинаковые. На текущий момент значения параметра должны лежать от 100 до 1000 (лучше 500) с большими значениями для менее качественных видео-потоков или большего движения.

Пример

LoadPlugIn("c:\archive\InverseTelecine.dll")
SegmentedAviSource("D:\capture.avi")
Decimate(5, 8, 500)
Дополнительная информация
Форматы YUV и RGB
Как известно, любой кодек разжимает либо в YUV либо в RGB формате. Говоря просто, RGB определяет пиксель присвоением 8 бит для Красного, Зелёного и Синего. YUV определяет пиксель его Яркостью и 2-мя цветоразностями. Следует помнить, что плагин использует значение Яркости для определения чередованы ли 2 строки, поэтому RGB не даст верной информации. Если кодек не разжимает в YUV формат, воспользуйтесь ConvertToYuY2.
Процедура Telecine
Процесс в ходе которого видео-поток с частотой кадров ~24 переводиться в видео-поток с частотой кадров ~30 (стандартный NTSC) добавлением двух полей (либо нечётных строк либо чётных) каждые 5 кадров (не сразу). В результате этого 3 из 5 кадров становятся чересстрочными, что хорошо выглядит на чересстрочном устройстве вывода (телевизор) но ужасно на прогрессивном (монитор).
Как работает плагин
Сперва плагин анализирует первые 5 кадров и определяет структуру "3:2 pulldown" выбирая 2 кадра с наименьшими артефактами чересстрочности. Далее, он продолжает выбирать каждый следующий кадр используя предопределенную структуру. Однако, каждый результирующий кадр анализируется, чтобы убедиться, что среди них не чересстрочных. Если значение чересстрочности превышает значение порога, структура "3:2 pulldown" вычисляется по новой.
    Реквизиты автора
  • E-Mail:Wizard_FL@Hotmail.com
  • ICQ: 4105331
Плагин MPEG2DEC.

MPEG2DEC.dll это AVISynth плагин дающий вам доступ к MPEG2 файлам также легко, как к нормальным AVI файлам. Это значит произвольный доступ к каждому кадру. Официальная страница http://me.in-berlin.de/~faphida/index.html.
mpeg2source
mpeg2source("file_name.d2v")

Код основан на проекте DVD2AVI v1.76 (http://hiroko.ee.ntu.edu.tw/). Фактически просто портирована VFAPI часть на C++ и добавлен ассемблерный код для получения YUV выхода. DVD2AVI всё ещё необходим для подготовки MPG файлов. Обычно, этот плагин используется так:
LoadPlugin("L:\path\MPEG2DEC.DLL")
video=mpeg2source("L:\path\mpg2video.d2v")
audio=AVISource("L:\path\sound.wav")
AudioDub(video, audio)

Первая строка загружает плагин. В результате новый метод AVISynth mpeg2source становиться доступен. Он используется во второй строке для открытия проектного файла DVD2AVI. Метод возвращает видео-клип готовый к использованию.

Следующие два шага необязательны. Но обычно ваше видео имеет звуковую дорожку, которую также надо обработать. Так как VFAPI плагин DVD2AVI не поддерживает извлечения звука, вы должны сперва отделить звуковую дорожку, чтобы она стала доступна из AVISynth как WAV файл. Этот файл открывается и присоединяется к видео-клипу в последних двух строках.

Преимуществом над VFAPI является то, что mpeg2source возвращает кадры в формате YUY2. VFAPI ограничено в RGB и вводит два времяёмких шагов преобразований (YUV->RGB, RGB->YUV)

Исходно плагин разрабатывался в рамках VFAPI соглашения, и конечно всё ещё возможно его использование таким образом даже в AVISynth. Напишите вместо LoadPlugin строку LoadVFAPIPlugin("L:\path\MPEG2DEC.dll", "mpeg2source"). Как результат вы получите потерю производительности из-за YUV->RGB преобразования.

Кроме метода mpeg2source плагин добавляет два фильтра: TemporalSmoother и SelectRangeEvery:
TemporalSmoother
TemporalSmoother(clip[,strength[,radius]])

Это портированный фильтр VirtualDub TemporalSmoother. Он работает в цветовых пространствах RGB32 и YUY2.

В файле помощи VirtualDub говориться: этот фильтр - адаптивный подавитель шума, работающий вдоль временной оси. Увеличивайте силу фильтра, чтобы увеличить шумоподавление и уменьшайте, для избавления от артефактов ряби и двоения. Рекомендуется комбинировать этот фильтр с пространственным (по площади) шумоподавителем для лучшего результата.

Все кадры не далее чем radius изучаются. Минимальный радиус - 1, максимальный - 7. Большие значения разумеется медленнее. Значение по умолчанию 3, как и то, что используется в VirtualDub. Значение по умолчанию для strength - 2.

Обратите внимание, что в отличии от своего VirtualDub двойника это фильтр не имеет задержки. Он обеспечивает нахождение кадра необходимого для работы в буфере. Поэтому, произвольный доступ к клипу медленен, особенно с большим radius.

Пример:
# Эффект фильтра отличается в RGB и YUV он не 100% эквивалентен, # особенно с большим значением strength # Давайте покажем различие
cYUY2 = ConvertToRGB(TemporalSmoother(ConvertToYUY2,10))
cRGB = TemporalSmoother(10)
Subtract(cYUY2, cRGB)
SelectRangeEvery
SelectRangeEvery(clip,every,length[,offset])

Выбирает length кадров каждые every кадров, начиная с offset. SelectRangeEvery(every,length,offset) одинаков с SelectRangeEvery(Trim(offset,0),every,length).
Плагин SpatialSoftenMMX.
    Системные требования
  • Win32
  • Расширения Athlon MMX или Intel SSE (и самый быстрый процессор, который вы можете достать...)
  • Память
  • AVISynth v1.x
    Реквизиты автора
  • Mathias Born
  • Домашняя страница http://me.in-berlin.de/~faphida/index.html
  • E-Mail:mborn@faphida.in-berlin.de
    Исходные материалы.
  • Алгоритмы использованные в этом фильтре не изобретены автором, напротив, они взяты из других источников.
  • Первая часть просто фильтр SpatialSoften из AVISynth портированный в MMX (и оптимизированный конечно)
  • Вторая часть пришла из фильтра VirtualDub dynamic noise reduction (разработчики Стивен Дон и Авери Ли)

Замечания по производительности

Итак, почему так ужасающе медленно? Причина в большом числе анализируемых пикселей для определения значения одного пикселя. Рассмотрим PAL видео: 720x576 x 4байта/цвет (RGB) = 1.58Mb. Радиус равный 4 даёт площадь 9x9 = 81 пикселей, таким образом фильтр читает 1.58 x 81 = 128Mb для каждого кадра!

Athlon 800 может вычислять 1 или 2 кадра в секунду. Высшие частоты не решают проблемы, так как она относится более к пропускной способности шины работы с памятью.

Можно ожидать, что YUV версия будет быстрее чем её RGB двойник благодаря меньшим требованиям к памяти. Но YUV формат пикселя сложен (читайте: времяёмок) для обработки. Как результат - разница невелика.

Часть кода может быть ещё оптимизирована: возможно удастся выжать несколько процентов переупорядочиванием некоторых инструкций чтобы воспользоваться параллельным запуском команд на современных процессорах. Но из-за малого числа регистров на архитектуре x86 почти все инструкции зависят от их порядка, и, особенно во внутреннем цикле, переупорядочивание невозможно.

Лучший вариант - использование видеосигнала без шума ^_^
Плагин GreedyHMA - Greedy (High Motion для AVISynth).

GreedyHMA.dll это плагин AVISynth выполняющий код алгоритма DScaler Greedy/HM для обнаружения структуры 3:2 pulldown, фильтрации и избавления от чересстрочности видео.
    Реквизиты
  • Пожалуйста присылайте комментарии Тому Барри (Tom Barry) - trbarry@trbarry.com
  • Временное расположение файлов:
    • Пока смотрите http://www.trbarry.com/GreedyHMA.zip
    • Исходный код на проекте открытых программ DScaler, или скоро будут. http://www.dscaler.org

Просто разожмите содержимое архива в вашу директорию с AVISynth, или ещё куда. Как видно из скрипта можно поместить плагин в поддиректорию к AVISynth, просто, чтобы держать их по-отдельности.

В архиве имеется тестовый скрипт:
LoadPlugin("d:\AVISynth\GreedyHMA\Debug\GreedyHMA.dll")
clip = AVISource("c:\vcr\bikes.avi")
return clip.GreedyHMA(1,0,4,0,0,0,0,0)

Здесь задаётся файл (укажите свой) и включаются TopFirst и AutoPulldown с прореживанием (отбрасывание кадров) до 24 FPS. Тесты проводились с AVISynth/VirtualDub

Возможно существует дефект кода, который требует чтобы параметр TopFirst был включен. Может быть это проявляется только с захватом Matrox G400 в MJPEG, но достигаемый результат несколько лучше с включённым параметром. Можно запустить 2-е копии VirtualDub и выполнить покадровое сравнение. Особо большой разницы не заметно но все же сравнение двух кадров (обратите внимание на диагонали) обычно покажет, что один лучше. Вы можете просто посмотреть вход VirtualDub для этого. Пока нет насущной необходимости в создании выходного файла.

В общем, если вы считаете что ваше видео (~ 30 FPS) происходит из фильма (~24 FPS), или так предполагает DVD2AVI, то применяйте:
GreedyHMA(1,0,5,0,0,0,0,0) # команда форсирует прореживание до 24 FPS

Если всё видел, применяйте:
GreedyHMA(1,0,0,0,0,0,0,0) # для 30 FPS на выходе
GreedyHMA(1,0,3,0,0,0,0,0) # для 24 FPS на выходе

И когда вы не знаете, не беспокоитесь, или всё перемешано, просто положитесь на автомат:
GreedyHMA(1,0,4,0,0,0,0,0) # общецелевые, наиболее автоматизированные установки
Более полное описание параметров.
GreedyHMA(TopFirst, SwapFields, AutoPullDown, MedianFilter, VerticalFilter, EdgeEnhance, GoodPullDownLvl, BadPullDownLvl)
Все значения целые, 0-нет, 1-да:
TopFirst
предполагает, что верхнее поле, строки 0,2,4,... должны отображаться первыми. Значение по умолчанию предположительно более общий случай BottomFirst (но не всегда).
SwapFields
для кривых драйверов захвата, помещающих строки 1,3,5,... до строк 0,2,4...
AutoPullDown
Устанавливает тип восстановления исходного порядка полей
0
Не восстанавливает, просто убирает гребёнку. Не отбрасывает кадры так что FPS остаётся какой был. Не прореживает. Используйте, если имеете (и хотите оставить) 30 FPS видеоисточник или возможно 25 FPS PAL видео.
1
Автоматическое восстановление. Автоматически решается, какие кадры должны быть подвергнуты процедуре восстановления (IVTC) или избавления от гребёнки (deinterlace), в зависимости от параметров Good Pulldown Lvls и Bad Pulldown Lvls (смотри ниже). Не прореживает. Лучший вариант если у вас в источнике смешаны фильм и видео и вы хотите 30 FPS на выходе. Также лучше для PAL источников.
2
Только восстановление (форсирование 24 FPS). Предполагает, что источник - фильм, всегда выполняет восстановление кадра и никогда не избавляется от гребёнки. Не прореживает.

Значения 3-5 соответствую вышеописанным, но с отбрасыванием кадров (прореживание). Просматриваются 5 кадров за раз и один наиболее похожий на дублированный отбрасывается, поэтому FPS опускается, скажем, с 30 до 24.

3
Освобождение от гребёнки (форсирование 30 FPS) но с отбрасыванием кадров. Применяйте для NTSC видео, если все же хотите проредить. С видеоисточником реально нет правильных полей для отбрасывания, но отброшены будут один кадр из наиболее похожих.
4
Автоматическое восстановление с отбрасыванием кадров. Лучшая (наиболее автоматическая) установка. Работает в большинстве случаев, по крайне мере если не имеет дефектов.
5
Только восстановление (форсирование 24 FPS) с отбрасыванием кадров. Даёт наилучшие результаты, если у вас 100% правильно подготовленный NTSC фильм источник не содержащий секций видео и слишком много монтажа. Возможно детектирование большинства смен сцены и изменение структуры восстановления, но не смешанных полей.

Что когда лучше полностью не тестировалось. Восстановление пока не идеально. Но если вы не уверены, оставьте значение 4 проста на всякий случай. Это должно всё ещё справляться со спортивным видео имеющим высокий уровень движения.

MedianFilter (по времени)
Внимание! Медианный фильтр в данной версии отключен.
Медианный фильтр помогает избавиться от шума но вызывает задержку на 2 поля. (Иначе на 1 поле) Задание 1 включает использование значения по умолчанию (сейчас 3, но может измениться) но вы можете также задать новое значение 2-255. Однако значения выше 3-5 могут стать причиной артефактов движения в быстром видео. Добавочное отбрасывание кадров медианного фильтра отключено так как работает с задержкой на 2 кадра в отличии от всего остального. Это выглядит не особо важным, так что на текущий момент не работает. Параметр сейчас игнорируется.
VerticalFilter
Не только освобождает от шума, но ещё слегка чистит артефакты освобождения от гребёнки так как выполняется последним, после избавления от гребёнки. Полезен, если вы собираетесь уменьшать. Используйте только значения 0 и 1 для параметра.
EdgeEnhance (по горизонтали)
Добавляет небольшую резкость к полноразмерному видео. Может использовать значения параметра 2-100. По умолчанию сейчас 50, если передано 1. Возможно будет поддержка отрицательных значений в будущем. Фильтрация горизонтальна, чтобы помочь с настройками для уменьшения размера.
Good Pulldown Lvl
Число от 1 до 255, которое должно быть превышено до того, как GreedyHMA восстановит кадр. Параметр применяется только когда AutoPulldown также включен. Значение по умолчанию подлежит изменению, а пока установлено в 90. Вы получите значение по умолчанию просто передав 0, что и рекомендуется для большинства случаев. Фактически это просто среднее по нескольким кадрам сохранённых показателей гребенчатости/переплетённости правильно согласованных кадров.
Bad Pulldown Lvl
Число от 1 до 255, которое не должно быть превышено до того, как GreedyHMA восстановит кадр. Значение по умолчанию подлежит изменению, а пока установлено в 85. Вы получите значение по умолчанию просто передав 0, что и рекомендуется для большинства случаев. Фактически это просто мера того, как сильно ухудшаться показатели гребенчатости/переплетённости кадра, если мы выполним чисто согласование полей.

Сейчас все 8 параметров должны присутствовать, проверка ошибок отсутствует, и нет других статей по Greedy/HM, кроме как на http://www.dscaler.org.
Известные проблемы и ограничения
  1. Только для машин с SSE! Расширение DScaler Greedy/HM написано, частично на ассемблере только для машин с SSE. Пока не сделан контроль нулевой погрешности, поэтому фильтр немедленно рухнет если вы не имеете хотя бы Celeron побыстрее, P-III, Athlon или выше. Нет уверенности, будет ли это в будущем исправлено, но возможно что да.
  2. Сейчас нет контроля ошибок или сообщений. Автор пока не разобрался как выводить сообщения об ошибках в AVISynth, и есть много чего, что надо ещё понять.
  3. Предполагается YUV(YUY2) основанный на кадрах вход. При необходимости сначала используйте методы AVISynth для конвертации.
  4. В настоящее время размер кара ограничен 999x576 пикселей. Исправлено... (Теперь, с целью поддержки HDTV, когда делалось для AVISynth установлено ограничение 1928x1081).
  5. Если у вас чистый, бесперебойный фильм-источник, без монтажа или капризного перевода в ~30 FPS и без видеоисточника, то вполне возможно что лучшую производительность и качество даст использование других функций VirtualDub для восстановления исходных кадров, а не морока с GreedyHMA. GreedyHMA спроектирован для высокоподвижных спортивных и смешанных видео с фильмом последовательностей. Он также может хорошо работать с аниме.
  6. Есть странный, не совсем понятный сбой. Если поставить новый или изменённый GreedyHMA.dll на свою машину, первый раз как вы запустите VirtualDub/AVISynth/GreedyHMA, VirtualDub может повиснуть. Если затем вы воспользуетесь Task Manager чтобы снять VirtualDub он заработает после этого. Чтобы избежать, похоже надо в начале открыть любой другой AVI файл в VirtualDub при первом запуске после установки GreedyHMA, до открытия каких-либо скриптов AVISynth. Позднейшее замечание: эффект не связан полностью с GreedyHMA, он происходит и без него.
  7. Сейчас фильтр работает правильно, если подаваемая ширина экрана кратна 16. в противном случае возможно формирование мусора в правом краю экрана, который вы возможно должны обрезать.
  8. Как отмечено выше опция медианной фильтрации временно игнорируется.
Метод избавления от гребёнки Greedy (High Motion).

Наконец следует слегка сокращённая копия резюме по Greedy (High Motion) со страницы помощи DScaler:

Плагин работает на двух различных уровнях. По умолчанию, на Первичном уровне, это нормальный метод избавления от гребёнки DScaler, со следующими особенностями.
    Что делает фильтр (Первичный уровень)
  • Объединение Blended Clip, Greedy (Low Motion), и немного новшеств.
  • Подразумеваемое Greedy восстановление оригинального кадра, как метод Greedy (Low Motion)
  • Смешивание параметров как метод Blended Clip.
  • Прогнозирующее выявление движения
  • Диагональное снижение ступенчатости (DJR) для сглаживания лестничного эффекта в движущихся диагональных линиях. Достигается это горизонтальным сглаживанием только быстро движущихся пикселов, не трогая стационарных. Если диагональная грань не движется, то она все равно не будет зубчатой при Greedy (High Motion).
  • Ползунковая регулировка для Max Comb (макс. гребёнка), Motion Threshold (порог движения) и Motion Sensitivity (чувствительность движения). Однако значения по умолчанию должны подходить в большинстве случаев.

Существует также Расширенный уровень (экспериментальный), включающийся, если вы отметите любой из элементов в интерфейсной панели метода. Вы не можете делать этого если не запускаете на машине поддерживающей набор инструкций Intel SSE (необходимы только целочисленные инструкции SSE). Расширенный уровень должен выполняться на Celeron побыстрее, Intel P-III, P4 и Athlon.

Когда используются расширенные возможности Greedy (HM) поддерживает свою собственную внутреннюю историю последних 4-х входных видео-полей. Значит он должен быть способен исследовать каждое поле и вы не можете использовать в тоже время обычную опцию DScaler - AutoPullDown.
    Что делает фильтр (Расширенный уровень)
  • Встроенное восстановление 3:2, 2:2 "n:m pulldown". Выполняется согласование, не устранение, так что все кадры показываются. Думается, что в итоге это будет лучше работать с видео-перекрытиями и живым TV просмотром, который подвергается интенсивному монтажу, но требуется дальнейшее совершенствование.
  • Промежуточные кадры. Даёт уменьшение дрожания для тех, кто имеет 60 Гц RTPV. В случае "3:2 pulldown" выберется подходящая пара полей в среднем единожды для каждых 5 кадров. Это может эффективно показать каждый новый входной кадр 2.5 раза. В результате небольшой объём размазывания движения каждый пятый кадр. Сам автор постоянно оставляет режим включенным для более гладкой последовательности кинофильма. С "2:2 pulldown" тоже работает (кажется), но половина кадров будет усреднена и размазывание движения может быть неприемлемым.
  • Настраиваемое усиление граней. Основано на идее Mr. Уигглеса(Wigggles). Опция усиливает только в небольшом объёме по горизонтальноё оси. Когда включено, вы можете использовать ползунок для подстройки.
  • Настраиваемый медианный фильтр. Также благодаря Mr. Уигглесу, фильтр может помочь убрать шум. Однако если установить выше 3-5 он также вызовет артефакты движения на быстродвижущихся сценах. Также имеет ползунок.
  • Вертикальный фильтр. Это программный вертикальный фильтр применяемый после избавления от гребёнки, который может устранить и шум и остаток артефактов избавления от артефактов избавления от гребёнки. Результат одинаков с аппаратной реализацией доступной на экране расширенных видео-флагов, но не такой экстремальный и без дрожания.


Подгружаемые фильтры.
###########################################################
# Этот файл обеспечивает стандартный интерфейс AVISynth к #
# различным плагинам VirtualDub. Его можно загрузить в    #
# свой скрипт командой:                                   #
#                                                         #
#   Import("vdfilters.avs")     #
###########################################################
#########################################################
# Измените VirtualDub_plugin_directory ниже на истинный #
# путь к директории содержащей ваши плагины VirtualDub #
#########################################################
global VirtualDub_plugin_directory = "d:\virtualdub\plugins"
##############################
# 2D Cleaner by Jim Casaburi #
##############################
function VD_2DCleaner(clip clip, int "threshold", int "radius", bool "interlaced")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\2dclean.vdf", "_VD_2DCleaner")
 return clip._VD_2DCleaner(default(interlaced,false)?1:0, threshold, radius)
}
####################################
# Temporal Cleaner by Jim Casaburi #
####################################
function VD_TemporalCleaner(clip clip, int "threshold", int "pixel_lock",
  \ int "threshold2", int "pixel_lock2", int "scene",
  \ bool "partial", bool "yuv")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\tclean.vdf", "_VD_TemporalCleaner", 10)
 return clip._VD_TemporalCleaner(default(threshold,10), default(pixel_lock,4),
  \  default(threshold2,16), default(pixel_lock2,8), default(scene,30),
  \  default(partial,false)?1:0, default(yuv,true)?1:0)
}
############################
# Colorize by Donald Graft #
############################
function VD_Colorize(clip clip, int "hue", int "sat", int "lum")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\colorize.vdf", "_VD_Colorize")
 return clip._VD_Colorize(default(hue, 0), default(sat, 150), default(lum, 150))
}
#############################
# Deflicker by Donald Graft #
#############################
# Двух-проходный фильтр, не поддерживается.
# Возможно будет переписан как фильтр AVISynth
############################################
# Hue/Saturation/Intensity by Donald Graft #
############################################
function DG_FloatToInt(f) { return round((default(f,1.0) - 1) * 100) }
function VD_Hue(clip clip, int "hue", bool "preserve_luma", float "sat", float "inten",
  \ bool "r", bool "g", bool "b", bool "y", bool "c", bool "m")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\hue.vdf", "_VD_Hue")
 hue = default(hue, 0)
 sat = DG_FloatToInt(sat)
 inten = DG_FloatToInt(inten)
 flags = (default(r,true)?1:0)+(default(g,true)?2:0)+(default(b,true)?4:0)
  \ +(default(y,true)?8:0)+(default(c,true)?16:0)+(default(m,true)?32:0)
 return clip._VD_Hue(hue, default(preserve_luma,false)?1:0, sat, inten, flags)
}
#############################################
# Red/Green/Blue Adjustment by Donald Graft #
#############################################
function VD_RGBAdjustment(clip clip, float "r", float "g", float "b")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\rgb.vdf", "_VD_RGBAdjustment")
 return clip._VD_RGBAdjustment(DG_FloatToInt(r), DG_FloatToInt(g), DG_FloatToInt(b))
}
#############################
# Smart Bob by Donald Graft #
#############################
# входной клип должен пройти через SeparateFields. Возможно вам
# понадобится AssumeFrameBased, AssumeFieldBased, или ComplementParity
# перед ним.
function VD_SmartBob(clip clip, bool "show_motion", int "threshold", bool "motion_map_denoising")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\bob.vdf", "_VD_SmartBob", 1)
 return clip.SeparateFields._VD_SmartBob(clip.GetParity()?1:0,
  \  default(show_motion,false)?1:0, default(threshold,10),
  \  default(motion_map_denoising,true)?1:0)
}
########################
# Logo by Donald Graft #
########################
function VD_Logo(clip clip, int "x", int "y", int "alpha", bool "transparent",
  \ int "xr", int "xg", int "xb", string "filename",
  \ bool "animate", int "start", int "duration", int "loops")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logo.vdf", "_VD_Logo", 1)
 return clip._VD_Logo(default(x,0), default(y,0), default(alpha,128),
  \ default(transparent,true)?1:0, default(xr,0), default(xg,0), default(xb,255),
  \ default(filename,"d:\virtualdub\plugins\logo.bmp"),
  \ default(animate,false)?1:0, default(start,0), default(duration,0), default(loops,0))
}
#####################################
# Smart Deinterlace by Donald Graft #
#####################################
# "Advanced Processing" опция не включена, так-как
# в ней дублируется встроеная функциональность AVISynth
function VD_SmartDeinterlace(clip clip, string "mode", string "channel", bool "show_motion",
  \  bool "blend", bool "motion_map_denoising", int "threshold")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smart.vdf", "_VD_SmartDeinterlace", 1)
 mode = default(mode, "frame")
 mode = (mode=="frame") ? 0 : (mode=="field") ? 1 : (mode=="both") ? 2 : -1
 Assert(mode>=0, """VD_SmartDeinterlace: "mode" parameter must be "frame", "field", or "both"""")
 channel = default(channel, "luma")
 channel = (channel=="luma") ? 0 : (channel=="all") ? 1 : -1
 Assert(channel>=0, """VD_SmartDeinterlace: "channel" parameter must be "luma" or "all"""")
 return clip._VD_SmartDeinterlace(default(show_motion,false)?1:0,
  \  default(blend,false)?1:0, default(threshold,20), 0, 0, 0,
  \  default(motion_map_denoising,true)?1:0, mode, channel)
}
##################################
# Smart Smoother by Donald Graft #
##################################
function VD_SmartSmoother(clip clip, int "diameter", int "threshold", bool "interlaced")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smooth.vdf", "_VD_SmartSmoother", 1)
 return clip._VD_SmartSmoother(default(diameter,5), default(threshold,25),
  \  default(interlaced,false)?1:0)
}
################################
# Unsharp Mask by Donald Graft #
################################
function VD_UnsharpMask(clip clip, int "diameter", int "strength", int "threshold",
  \ bool "interlaced", int "mask_top", int "mask_bottom",
  \ int "mask_left", int "mask_right")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\unsharp.vdf", "_VD_UnsharpMask", 1)
 return clip._VD_UnsharpMask(default(diameter,5), default(strength,32),
  \  default(threshold,0), default(mask_left,0), default(mask_right,0),
  \  default(mask_bottom,0), default(mask_top,0), default(interlaced,false)?1:0)
}
##########################
# Subtitler by Avery Lee #
##########################
# не-сглаженный режим не поддерживаентся, так-как
# эмулятор VirtualDub не поддерживает NEEDS_HDC
function VD_Subtitler(clip clip, string filename)
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\subtitler.vdf", "_VD_Subtitler")
 return clip._VD_Subtitler(1, filename)
}
#################################
# Border Smear by Simon Walters #
#################################
function VD_BorderSmear(clip clip, int yt, int yb)
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\brdrsmr.vdf", "_VD_BorderSmear")
 return clip._VD_BorderSmear(yt, yb)
}
################################
# Logoaway by Krzysztof Wojdon #
################################
function VD_LogoAway(clip clip, string "mode", int "x", int "y", int "width",
  \  int "height", int "keyframe", int "color")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logoaway.vdf", "_VD_LogoAway")
 mode = default(mode, "xblur")
 mode = (mode=="xblur")?1:(mode=="yblur")?2:(mode=="xyblur")?3:(mode=="copy")?4:
  \  (mode=="avgborder")?5:(mode=="solid")?6:0
 Assert(mode>0, "VD_LogoAway: mode must be one of: xblur yblur xyblur copy avgborder solid")
 return clip._VD_LogoAway(mode, default(x,300), default(y,8), default(width,14),
  \  default(height,12), default(keyframe,0), default(color,0))
}
##########################
# Cartoon Tool by flaXen #
##########################
# "Show Inverse Map" не поддерживается, так-как очевидно
# недоступен через интерфейс скрипта
function VD_CartoonTool(clip clip, int "scale_base", int "scale_intensity", int "pixel_base")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\fxtoon.vdf", "_VD_CartoonTool")
 return clip._VD_CartoonTool(default(scale_base,16),default(scale_intensity,200),default(pixel_base,16))
}
########################
# VHS Filter by flaXen #
########################
function VD_VHS(clip clip, bool "stabilize", int "luma_threshold", int "chroma_threshold",
  \ int "temporal_error", int "temporal_bias", int "noise_threshold",
  \ int "pixel_radius", bool "prefilter", bool "postfilter", bool "sharpen",
  \ int "sharpen_amount", bool "eight_direction", int "chroma_shift_x",
  \ int "chroma_shift_y", bool "shift_i", bool "shift_q")
{
 LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\fxvhs.vdf", "_VD_VHS")
 return clip._VD_VHS(default(stabilize,true)?1:0, default(luma_threshold,5),
  \  default(chroma_threshold,30), default(temporal_error,15), default(temporal_bias,5),
  \  default(noise_threshold,10), default(pixel_radius,1), default(prefilter,false)?1:0,
  \  default(postfilter,false)?1:0, default(sharpen,false)?1:0, default(sharpen_amount,15),
  \  default(eight_direction,false)?1:0, default(chroma_shift_x,-1), default(chroma_shift_y,0),
  \  default(shift_i,false)?1:0, default(shift_q,false)?1:0)
}


Учебное пособие.
Линейное редактирование

В первой части сего пособия, мы сконцентрируемся на линейном редактировании того же сорта, что вы можете выполнить в VirtualDub. Скриптовый язык AVISynth писался с расчётом на простоту решения задач линейного редактирования: вам нет нужды волноваться о переменных и сложных выражениях если вы этого не хотите.

Как только вы установили AVISynth, воспользуйтесь текстовым редактором для создания файла с именем version.avs (или любым другим, лишь бы расширение было AVS) и вставьте туда следующую единственную строку текста:
Version

Теперь запустите Windows Media Player и используйте его для открытия вашего файла. Если всё в порядке, вы должны увидеть десяти-секундный видео-клип показывающий информацию относящуюся к версии AVISynth. (Если же вы получите ошибку говорящую "формат не поддерживается", удостоверьтесь, что вы выполнили все инструкции по установке.)

Version - то, что можно назвать методом-источником, подразумевая, сто он формирует новый клип вместо модификации существующего. Первой командой в скрипте AVISynth должен быть метод источник (или команда загрузки внешнего фильтра).

Теперь добавьте вторую строчку в файл скрипта, так что он должен читаться так:
Version
ReduceBy2

Снова откройте этот файл в Windows Media Player. Вы снова должны увидеть информацию о версии, но в половину прежнего размера. ReduceBy2 - трансформирующий фильтр, это значит, что он берёт существующий фильтр и каким-то образом модифицирует его. Вы можете собрать последовательно множество трансформирующих фильтров, как в VirtualDub. Например добавим ещё один, чтобы сделать наше видео затухающим в темноту в конце. Добавим ещё строчку в файл скрипта:
Version
ReduceBy2
FadeOut(15)

Опять откроем файл. Клип должен быть таким же первые 9 секунд и затем, на последней секунде должен плавно перейти в чёрный. Фильтр FadeOut берёт целочисленный аргумент, который показывает число затухающих кадров. Видео сформированное Version имеет частоту кадров 15 FPS, так что аргумент равный 15 для FadeOut начинает заглушать за одну секунду до конца.

Проходит много времени до начала заглушения, так что давайте отрежем начало клипа для уменьшения ожидания. Клип формируемый Version - 150 кадров длинной (15 FPS в течении 10 секунд), и AVISynth начинает отсчёт кадров с 0, так что имеем кадры с 0 до 149. FadeOut добавляет лишний кадр, так что конец этого скрипта несколько дальше, кадры меняются с 0 до 150. Давайте отбросим первые 120 из них:
Version
ReduceBy2
FadeOut(15)
Trim(120,150) # отрезать первые 8 секунд

В этом примере впервые использован комментарий. Комментарий начинается с символа #, продолжается до конца строки и полностью игнорируется AVISynth.

Trim требует два аргумента разделённых запятой: первый и последний кадр части клипа, которую следует сохранить. Если передать 0 как номер последнего кадра, то это будет аналогично концу клипа, так что команда вырезания в скрипте может быть просто записана как Trim(120,0).

Помнить число кадров таким образом муторно. Гораздо легче открыть частично-готовый клип в приложении типа VirtualDub, которое покажет вам число кадров. Вы также можете использовать фильтр ShowFrameNumber, который впечатает номер кадра в него самого.

Имеется много других фильтров для обобщённого масштабирования, для размытия/подчёркивания границ, и для других целей. Прочитайте описание списка команд для всех чудовищных подробностей. На практике гораздо более используемым фильтром нежели Version будет AVISource, считывающий AVI файл (или один из нескольких других типов файлов) с диска. Если у вас есть поблизости AVI файл, вы можете попробовать использовать те же фильтры на нём:
AVISource("d:\capture.avi") # или как вы там его назовёте
ReduceBy2
FadeOut(15)
Trim(120,0)

Даже однострочный скрипт содержащий только команду AVISource может быть весьма полезен для добавления поддержки AVI файлов >2GB к приложениям поддерживающим только файлы <2GB.
Нелинейное редактирование

Теперь перейдём к более весёлой части. Сделаем AVS файл со следующим скриптом внутри:
StackVertical(Version, Version)

Теперь откроем его. Результат: Выходное видео имеет две идентичных линии информации о версии, одно над другой.

Вместо передачи чисел или строк как аргументов, StackVertical берёт видео-клипы. В этом скрипте, Version вызывается дважды. Каждый раз, метод возвращает копию клипа о версии. Эти два клипа затем передаются в StackVertical, который объединяет их вместе (не интересуясь их происхождением).

Один из наиболее используемых фильтров такого типа это UnalignedSplice, который соединяет видео-клипы друг-за-другом. Вот скрипт, который грузит три AVI файла (которые могут быть созданы AVI_IO) и объединяет их вместе.

UnalignedSplice(AVISource("d:\capture.00.avi"), AVISource("d:\capture.01.avi"), AVISource("d:\capture.02.avi"))

(Метод SegmentedAVISource обеспечивает лучшую реализацию. смотрите описание команд).

Обе команды, StackVertical и UnalignedSplice могут принимать как минимум два и как максимум шестьдесят аргументов.

Вы можете использовать оператор "+" как псевдоним для UnalignedSplice. К примеру, такой скрипт делает тоже, что и предыдущий.
AVISource("d:\capture.00.avi") + AVISource("d:\capture.01.avi") + AVISource("d:\capture.02.avi")

Давайте теперь предположим вы захватываете видео используя VIDCAP32. Это приложение также сохраняет видео в различных AVI сегментах, но оно помещает аудио в отдельном WAV файле. Можем ли мы воссоединить всё? Ваши ставки:
AudioDub(AVISource("d:\capture.00.avi")+AVISource("d:\capture.01.avi")+AVISource("d:\capture.02.avi"), WAVSource("d:\audio.wav"))

Все обычные трансформирующие фильтры использованные в части линейного редактирования принимают видео-клип своим последним аргументом. Так что вы можете написать к примеру:

FadeOut(15, ReduceBy2(Version))
Вместо:
Version
ReduceBy2
FadeOut(15)
Переменные

Вы должно-быть заметили то, что пример с AudioDub был немного неуклюж, и если мы объединяем более трёх файлов будет ещё хуже. Вы можете упростить ваши выражения использованием переменных. Вот другая версия последнего примера, который более управляем и лёгок для понимания:
a = AVISource("d:\capture.00.avi")
b = AVISource("d:\capture.01.avi")
c = AVISource("d:\capture.02.avi")
sound_track = WAVSource("d:\audio.wav")

AudioDub(a+b+c, sound_track)

Имена переменных может содержать до пятидесяти символов длинной и содержать буквы, числа и подчёркивание (_). Вы можете присвоить результат выражения переменной поместив имя переменной в начале строки, следующим = и затем выражение. После этого видео-клип будет присвоен переменной. Вы можете использовать переменную позже в любом месте, где ожидается клип.

Переменные никогда не изменяются пока вы не переприсвоите их. Для примера, вы можете написать ReduceBy2(myvideo), но это не изменит переменной "myvideo" пока вы не присвоите результат снова используя myvideo=ReduceBy2(myvideo)
Подразумевание last

Что если вы не присваиваете результат выражения переменной? Ответ - результат будет присвоен специальной переменной именуемой "last", как если бы строка начиналась "last=". last обычно подразумевается в двух других ситуациях: первое, если мы используем фильтр, и фильтр имеет один параметр clip первым в своём списке аргументов, который вы не указываете; и второе, когда скрипт заканчивается, видео-клип в last берётся как "значение возврата" скрипта это видео клип, который видит приложение открывая скрипт.

Эти три правила, взятые вместе, причина по которой примеры линейного редактирования в первой части были работоспособны без явных переменных. Вот один из ранних примеров, переписанный полностью явно:
last = Version
last = ReduceBy2(last)
last = FadeOut(last, 15)
return last

Команда return использованная здесь должна сама себя объяснять, но если хотите можете посмотреть в описании.

Неявное использование last может быть полезно даже в нелинейном редактировании. К примеру если мы хотим загрузить AVI файл, извлечь две сцены из него и объединить их вместе с видимым перекрытием между ними, то можно записать что-нибудь вроде:
AVISource("capture.avi")
Dissolve(10, Trim(123,456), Trim(789,1000))

Здесь два фильтра Trim и каждый использует клип, который последним был присвоен last - который в этом случае результат выполнения AVISource.
Объёктно-ориентированная запись

Уже упоминалось, что трехстрочный пример с Version/ReduceBy2/FadeOut может быть переписан в виде:
FadeOut(15, ReduceBy2(Version))

Пример рабочий, но несколько сбивающий с толку. Из-за одной вещи - порядок написания функций обратен порядку, в котором они выполняться (проблема донимавшая математиков веками). И ещё одна вещь, по мере добавления функций вы получаете всё больше и больше окружающих скобок, и трудно сказать как много их надо в конце.

AVISynth поддерживают другой стиль записи вызовов функций, называемый стилем "ООП записи", который представляется лучше функционального стиля" во многих ситуациях. Применяя стиль "ООП записи" можно записать вышеупомянутый скрипт так:
Version.ReduceBy2.FadeOut(15)

Это напоминает синтаксис вызова метода используемый во многих объектно-ориентированных языках программирования, таких как C++ и JAVA. Вот ещё пример:
myvideo = AVISource("capture.avi")
return Dissolve(10, myvideo.Trim(123,456), myvideo.Trim(789,1000))

Недостаток стиля ООП записи в том, что он может использоваться только с фильтрами типа Trim которым требуется один параметр видео-клип, но не с фильтрами типа Dissolve которым требуется несколько.

Остаётся верным то, что переменная не изменяется, пока ей ничего не присвоили, так что если вы напишите myvideo.ConvertToRGB(), то конвертированная версия клипа будет помещена в last и myvideo останется неизменным.


###########################################################
# Этот файл обеспечивает стандартный интерфейс AVISynth к #
# различным плагинам VirtualDub. Его можно загрузить в    #
# свой скрипт командой:                                   #
#                                                         #
# 	 Import("vdfilters.avs")			  #
###########################################################

#########################################################
# Измените VirtualDub_plugin_directory ниже на истинный #
# путь к директории содержащей	ваши плагины VirtualDub #
#########################################################

global VirtualDub_plugin_directory = "d:\virtualdub\plugins"

##############################
# 2D Cleaner by Jim Casaburi #
##############################

function VD_2DCleaner(clip clip, int "threshold", int "radius", bool "interlaced")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\2dclean.vdf", "_VD_2DCleaner")
    return clip._VD_2DCleaner(default(interlaced,false)?1:0, threshold, radius)
}

####################################
# Temporal Cleaner by Jim Casaburi #
####################################

function VD_TemporalCleaner(clip clip, int "threshold", int "pixel_lock",
        \	int "threshold2", int "pixel_lock2", int "scene",
        \	bool "partial", bool "yuv")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\tclean.vdf", "_VD_TemporalCleaner", 10)
    return clip._VD_TemporalCleaner(default(threshold,10), default(pixel_lock,4),
        \  default(threshold2,16), default(pixel_lock2,8), default(scene,30),
        \  default(partial,false)?1:0, default(yuv,true)?1:0)
}

############################
# Colorize by Donald Graft #
############################

function VD_Colorize(clip clip, int "hue", int "sat", int "lum")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\colorize.vdf", "_VD_Colorize")
    return clip._VD_Colorize(default(hue, 0), default(sat, 150), default(lum, 150))
}

#############################
# Deflicker by Donald Graft #
#############################

# Двух-проходный фильтр, не поддерживается.
# Возможно будет переписан как фильтр AVISynth

############################################
# Hue/Saturation/Intensity by Donald Graft #
############################################

function DG_FloatToInt(f) { return round((default(f,1.0) - 1) * 100) }

function VD_Hue(clip clip, int "hue", bool "preserve_luma", float "sat", float "inten",
        \	bool "r", bool "g", bool "b", bool "y", bool "c", bool "m")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\hue.vdf", "_VD_Hue")
    hue = default(hue, 0)
    sat = DG_FloatToInt(sat)
    inten = DG_FloatToInt(inten)
    flags = (default(r,true)?1:0)+(default(g,true)?2:0)+(default(b,true)?4:0)
        \ +(default(y,true)?8:0)+(default(c,true)?16:0)+(default(m,true)?32:0)
    return clip._VD_Hue(hue, default(preserve_luma,false)?1:0, sat, inten, flags)
}

#############################################
# Red/Green/Blue Adjustment by Donald Graft #
#############################################

function VD_RGBAdjustment(clip clip, float "r", float "g", float "b")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\rgb.vdf", "_VD_RGBAdjustment")
    return clip._VD_RGBAdjustment(DG_FloatToInt(r), DG_FloatToInt(g), DG_FloatToInt(b))
}

#############################
# Smart Bob by Donald Graft #
#############################

# входной клип должен пройти через SeparateFields. Возможно вам
# понадобится AssumeFrameBased, AssumeFieldBased, или ComplementParity
# перед ним.

function VD_SmartBob(clip clip, bool "show_motion", int "threshold", bool "motion_map_denoising")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\bob.vdf", "_VD_SmartBob", 1)
    return clip.SeparateFields._VD_SmartBob(clip.GetParity()?1:0,
        \  default(show_motion,false)?1:0, default(threshold,10),
        \  default(motion_map_denoising,true)?1:0)
}

########################
# Logo by Donald Graft #
########################

function VD_Logo(clip clip, int "x", int "y", int "alpha", bool "transparent",
        \ int "xr", int "xg", int "xb", string "filename",
        \	bool "animate", int "start", int "duration", int "loops")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logo.vdf", "_VD_Logo", 1)
    return clip._VD_Logo(default(x,0), default(y,0), default(alpha,128),
        \ default(transparent,true)?1:0, default(xr,0), default(xg,0), default(xb,255),
        \ default(filename,"d:\virtualdub\plugins\logo.bmp"),
        \ default(animate,false)?1:0, default(start,0), default(duration,0), default(loops,0))
}

#####################################
# Smart Deinterlace by Donald Graft #
#####################################

# "Advanced Processing" опция не включена, так-как
# в ней дублируется встроеная функциональность AVISynth

function VD_SmartDeinterlace(clip clip, string "mode", string "channel", bool "show_motion",
        \  bool "blend", bool "motion_map_denoising", int "threshold")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smart.vdf", "_VD_SmartDeinterlace", 1)
    mode = default(mode, "frame")
    mode = (mode=="frame") ? 0 : (mode=="field") ? 1 : (mode=="both") ? 2 : -1
    Assert(mode>=0, """VD_SmartDeinterlace: "mode" parameter must be "frame", "field", or "both"""")
    channel = default(channel, "luma")
    channel = (channel=="luma") ? 0 : (channel=="all") ? 1 : -1
    Assert(channel>=0, """VD_SmartDeinterlace: "channel" parameter must be "luma" or "all"""")
    return clip._VD_SmartDeinterlace(default(show_motion,false)?1:0,
        \  default(blend,false)?1:0, default(threshold,20), 0, 0, 0,
        \  default(motion_map_denoising,true)?1:0, mode, channel)
}

##################################
# Smart Smoother by Donald Graft #
##################################

function VD_SmartSmoother(clip clip, int "diameter", int "threshold", bool "interlaced")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\smooth.vdf", "_VD_SmartSmoother", 1)
    return clip._VD_SmartSmoother(default(diameter,5), default(threshold,25),
        \  default(interlaced,false)?1:0)
}

################################
# Unsharp Mask by Donald Graft #
################################

function VD_UnsharpMask(clip clip, int "diameter", int "strength", int "threshold",
        \	bool "interlaced", int "mask_top", int "mask_bottom",
        \	int "mask_left", int "mask_right")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\unsharp.vdf", "_VD_UnsharpMask", 1)
    return clip._VD_UnsharpMask(default(diameter,5), default(strength,32),
        \  default(threshold,0), default(mask_left,0), default(mask_right,0),
        \  default(mask_bottom,0), default(mask_top,0), default(interlaced,false)?1:0)
}

##########################
# Subtitler by Avery Lee #
##########################

# не-сглаженный режим не поддерживаентся, так-как
# эмулятор VirtualDub не поддерживает NEEDS_HDC

function VD_Subtitler(clip clip, string filename)
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\subtitler.vdf", "_VD_Subtitler")
    return clip._VD_Subtitler(1, filename)
}

#################################
# Border Smear by Simon Walters #
#################################

function VD_BorderSmear(clip clip, int yt, int yb)
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\brdrsmr.vdf", "_VD_BorderSmear")
    return clip._VD_BorderSmear(yt, yb)
}

################################
# Logoaway by Krzysztof Wojdon #
################################

function VD_LogoAway(clip clip, string "mode", int "x", int "y", int "width",
        \  int "height", int "keyframe", int "color")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\logoaway.vdf", "_VD_LogoAway")
    mode = default(mode, "xblur")
    mode = (mode=="xblur")?1:(mode=="yblur")?2:(mode=="xyblur")?3:(mode=="copy")?4:
        \  (mode=="avgborder")?5:(mode=="solid")?6:0
    Assert(mode>0, "VD_LogoAway: mode must be one of: xblur yblur xyblur copy avgborder solid")
    return clip._VD_LogoAway(mode, default(x,300), default(y,8), default(width,14),
        \  default(height,12), default(keyframe,0), default(color,0))
}

##########################
# Cartoon Tool by flaXen #
##########################

# "Show Inverse Map" не поддерживается, так-как очевидно
# недоступен через интерфейс скрипта

function VD_CartoonTool(clip clip, int "scale_base", int "scale_intensity", int "pixel_base")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\fxtoon.vdf", "_VD_CartoonTool")
    return clip._VD_CartoonTool(default(scale_base,16),default(scale_intensity,200),default(pixel_base,16))
}

########################
# VHS Filter by flaXen #
########################

function VD_VHS(clip clip, bool "stabilize", int "luma_threshold", int "chroma_threshold",
        \	int "temporal_error", int "temporal_bias", int "noise_threshold",
        \	int "pixel_radius", bool "prefilter", bool "postfilter", bool "sharpen",
        \	int "sharpen_amount", bool "eight_direction", int "chroma_shift_x",
        \	int "chroma_shift_y", bool "shift_i", bool "shift_q")
{
    LoadVirtualdubPlugin(VirtualDub_plugin_directory+"\fxvhs.vdf", "_VD_VHS")
    return clip._VD_VHS(default(stabilize,true)?1:0, default(luma_threshold,5),
        \  default(chroma_threshold,30), default(temporal_error,15), default(temporal_bias,5),
        \  default(noise_threshold,10), default(pixel_radius,1), default(prefilter,false)?1:0,
        \  default(postfilter,false)?1:0, default(sharpen,false)?1:0, default(sharpen_amount,15),
        \  default(eight_direction,false)?1:0, default(chroma_shift_x,-1), default(chroma_shift_y,0),
        \  default(shift_i,false)?1:0, default(shift_q,false)?1:0)
}